0.8--一些C++常见的问题[译]

原文:0.8--一些C++常见的问题  作者:Alex

在本节中,我们将解决新程序员似乎很有可能遇到的一些常见问题。这并不是编译或执行问题的全面列表,而是非常基本问题的实用解决方案列表。如果您对可能添加到此列表中的其他问题有任何建议,请在下面的评论部分中发布。

一般运行时问题

问:执行程序时,控制台窗口闪烁,然后立即关闭。

首先,添加或确保以下行位于程序顶部附近(Visual Studio 用户,请确保这些行出现在#include“pch.h”或#include“stdafx.h”之后,如果存在的话):

#include <iostream>
#include <limits>

其次,在 main() 函数末尾添加以下代码(就在 return 语句之前):

std::cin.clear(); // 重置任何错误标志
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略输入缓冲区中的任何字符,直到找到换行符
std::cin.get(); // 从用户处再获取一个字符(等待用户按enter键)

这将导致您的程序在继续之前等待用户按下某个键,这将使您有时间在操作系统关闭控制台窗口之前检查程序的输出。

其他解决方案,例如通常建议的system("pause")解决方案可能仅适用于某些操作系统,应避免使用。

当程序以调试启动 (F5) 模式运行时,旧版本的 Visual Studio 可能不会暂停。尝试在“启动但不调试”(Ctrl-F5) 模式下运行。

问:我运行程序并出现一个窗口,但没有输出。

您的病毒扫描程序或反恶意软件可能会阻止执行。尝试暂时禁用它,看看是否是问题所在。

问:我的程序可以编译,但无法正常运行。我该怎么办?

调试一下吧!第 3 章后面有关于如何诊断和调试程序的提示。

一般编译时问题

问:当我编译程序时,收到有关无法解析的外部符号 _main 或 _WinMain@16 的错误

这意味着你的编译器找不到你的 main() 函数。所有程序都必须包含 main() 函数。

有几件事需要检查:

  1. 您的代码是否包含名为 main 的函数?
  2. main 拼写正确吗?
  3. 当您编译程序时,您是否看到包含函数 main() 的文件被编译?如果没有,请将 main() 函数移至该函数,或将该文件添加到您的项目中(有关如何执行此操作的更多信息,请参阅第 2.8 课——具有多个代码文件的程序)。
  4. 您是否创建了控制台项目?尝试创建一个新的控制台项目。

问:我正在尝试使用 C++11/14/17/XX 功能,但它不起作用

如果您的编译器很旧,它可能不支持该语言的这些最新添加内容。在这种情况下,请升级您的编译器。

对于现代 IDE/编译器,您的编译器可能默认使用较旧的语言标准。我们在第 0.12 课——配置编译器:选择语言标准中介绍了如何更改语言标准。

问:当尝试使用 cin、cout 或 endl 时,编译器说 cin、cout 或 endl 是“未声明的标识符”

首先,确保在文件顶部附近包含以下行:

#include <iostream>

其次,确保每次使用 cin、cout 和 endl 时都以“std::”为前缀。例如:

std::cout << "Hello world!" << std::endl;

如果这不能解决您的问题,则可能是您的编译器已过期,或者安装已损坏。尝试重新安装和/或升级到最新版本的编译器。

问:当尝试使用 endl 结束打印行时,编译器说 end1 是“未声明的标识符”

确保您不会将 endl 中的字母 l(小写 L)误认为是数字 1。endl 都是字母。确保您的编辑器使用的字体能够清楚区分小写字母 L、大写 i 和数字 1 之间的差异。此外,在许多非编程字体中,大写字母 o 和数字零很容易混淆。

问:编译程序时,出现“文件末尾无换行符”错误

C++ 标准要求所有源 (.cpp) 文件以换行符结尾。这很愚蠢,但事实就是如此。转到源文件的底部,按 Enter 键,保存并重新编译。

Visual Studio 问题

问:使用 Microsoft Visual C++ 进行编译时,出现 C1010 致命错误,并显示类似“c:\vcprojects\test.cpp(263) :fatal error C1010: Outstanding end of file whilelooking for precompiled headerdirective”的错误消息

当 Microsoft Visual C++ 编译器设置为使用预编译头,但一个(或多个)C++ 代码文件未 #include “stdafx.h” 或 #include “pch.h” 作为代码的第一行时,会出现此错误文件。

我们建议的修复方法是关闭预编译头,我们将在第 0.7 课——编译您的第一个程序中展示如何执行此操作。

如果您想保持预编译头打开,要解决此问题,只需找到产生错误的文件(在上面的错误中,test.cpp 是罪魁祸首),然后在最顶部添加以下行文件):

#include "pch.h"

旧版本的 Visual Studio 使用“stdafx.h”而不是“pch.h”,因此如果 pch.h 无法解决问题,请尝试 stdafx.h。

请注意,对于具有多个文件的程序,每个 C++ 代码文件都需要以此行开头。

问:Visual Studio 给出如下错误:“1MSVCRTD.lib(exe_winmain.obj) : error LNK2022: 函数“int __cdecl invoke_main(void)”(?invoke_main@@YAHXZ) 中引用了无法解析的外部符号 _WinMain@16”

您可能创建了 Windows 图形应用程序而不是控制台应用程序。重新创建您的项目,并确保将其创建为 Windows(或 Win32)控制台项目。

问:当我编译程序时,收到有关“无法找到或打开 PDB 文件”的警告

这是警告,而不是错误,因此它不会影响您的程序。然而,这很烦人。要修复它,请进入“调试”菜单 ->“选项和设置”->“符号”,然后选中“Microsoft Symbol Server”。

其他的东西

问:我还有一些无法解决的问题。我怎样才能快速得到答案?

当您学习这些材料时,您无疑会产生疑问或遇到意想不到的问题。接下来做什么取决于您的问题。但总的来说,您可以尝试一些事情。

首先,询问搜索引擎。找到一个好方法来表达你的问题并进行搜索。如果您正在搜索错误消息,请使用引号粘贴准确的错误消息(不包括任何文件名或行号)。很可能有人已经问过同样的问题,并且有一个答案在等着你。

其次,通过 Bing 询问像 ChatGPT 这样的人工智能。以“在 C++ 中”开始您的问题,以获得特定于 C++ 的答案。您可以要求的一些想法:

  • 对某些概念的解释(例如“在 C++ 中,什么是局部变量?”)。
  • 两件事之间的区别(例如“在 C++ 中,指针和引用之间有什么区别?”)
  • 概念演示(例如“在 C++ 中,编写一个将两个数字相加的短程序”)

请注意,人工智能可能会返回不准确或过时的信息,并且它们编写的程序可能不会遵循现代最佳实践。

如果上述方法失败,请在问答板上提问。有些网站专为编程问题和解答而设计,例如 Stack Overflow。尝试在那里发布您的问题。请记住彻底了解您的问题所在,并包含所有相关信息,例如您使用的操作系统以及您使用的 IDE。

posted on 2024-05-02 22:55  一只空气  阅读(103)  评论(0)    收藏  举报