学C++_第0章 引言/指南_0.8 一些常见的C++问题

本文列举了C++编程初学者可能遇到的一些常见问题,包括运行时问题、编译问题以及Visual Studio特有的问题,并提供了相应的解决方案。如控制台窗口瞬间关闭、编译时的未解析外部符号错误、预编译头文件问题等。建议读者在遇到问题时,尝试文中提到的解决方法或在线搜索答案。
摘要由CSDN通过智能技术生成

梅冠华-2019-05-22
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第8节
https://www.learncpp.com/cpp-tutorial/a-few-common-cpp-problems/

0.8 一些常见的C++问题

这一节中,我们将列出一些常见的问题,它们是编程新手最有可能碰到的问题。这不是说要提供一个编译或执行问题的详尽清单,而是说对于基础问题的实用解决方案列表。如果你对于其它问题有任何建议,可以添加到该列表中来,那么请把它们公布到下面的评论区里。

常见的运行问题


Q:当程序运行时,控制台窗口闪了下瞬间就关掉了

首先,添加或是确保如下行代码是在你程序的最上部(Visual Studio用户,确保这些行出现在 #include “pch.h” 或 #include "stdafx.h"后面,如果有的话):

#include <iostream>
#include <limits>

然后,在mian()函数的最后添加如下代码(刚好就在return语句之前)

std::cin.clear(); // reset any error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find an enter character
std::cin.get(); // get one more char from the user

这将让你的程序在继续之前需要等待用户来按下一个键,这给了你时间去检查你的程序输出,在你的编译器关闭控制台窗口之前。

其他的解决方法,比如经常推荐使用的system(“pause”)方法可能仅仅适用于某些操作系统,所以就不再讲解了。

老版本的Visual Studio也许不会暂停,当程序是运行在Start With Debugging (F5) 模式下的时候。试着运行下Start Without Debugging (ctrl-F5)模式。


Q:我运行了我的程序,有一个窗口但是没有输出。

你的反病毒或反恶意软件也可能阻断程序的执行,试着暂时关闭你的扫描器看看问题是否解决了。


Q:我的程序编译好了但是它不正常工作,咋整?

Debug(纠错)它啊!在第1或2章有内容专门讲如何诊断和纠错你的程序。


常见的编译问题


Q:当我编译我的程序时,我碰到了一个错误提示unresolved external symbol _main or _WinMain@16

它的意思是你的编译器没找到你的main()函数。所有的程序必须有一个main()函数的。

你需要检查如下事项:
a)你的代码里面有没有包含一个名为main的函数?
b)main是不是拼写正确了?
c)当你编译你的程序时,你是否看到包含函数main()的文件编译了?如果没有的话,要么把main()函数移动到可编译的文件里,要么把那个文件(包含main()函数的文件)添加到你的工程里(参考2.8节–多代码文件编程,来获取更多信息)。
d)你创建console工程了么?试着创建一个新的console工程。


Q:我试着使用C++11/14/17/XX功能但它不起作用

如果你的编译器是老的,它也许并不支持这些近来添加的功能。如果那样的话,更新你的编译器。

或者说,你可以试着看看是否你的编译器是支持这些的,只是它被默认关闭掉了。对于GCC/G++,你可以试着给编译器传递标识 -std=C++11、-std=c++14、或者 -std=c++17。对于Code::Blocks,确保全局编译器设置是合理的。我们在0.6节 – 安装一个集成开发环境中已经讲了怎么做这事儿。


Q:当使用cin、cout、或者endl时,编译器说cin, cout, or endl 是‘未声明的标识符’( ‘undeclared identifier’)

首先,确保你已经在你的文件最上端包含了如下行信息:

#include <iostream>

其次,确保每个使用的cin、cout、和endl前面都有“std::”,例如:

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

如果这也无济于事的话,那么也许是你的编译器过时了,或者安装崩溃了。试着重新安装和/或更新你的编译器到最新版本。


Q:当尝试使用endl来终止输出行的时候,编译器说end1是‘未声明的标识符’( ‘undeclared identifier’)

确保你没有把在endl中的字母l(小写L)错搞成了数字1。endl全是字母。确保你的编译器使用的字体能够清晰地区分小写字母L、大写字母i、以及数字1。还有大写字母o以及数字0也非常容易混淆,尤其是对于不适用于编程的字体而言。

Visual Studio问题


Q:当用微软的Visual C++编译时,碰到了C1010致命错误,报错信息是“c:\vcprojects\test.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive”

这个错误发生的原因是,Microsoft Visual C++编译器被设置成了使用precomplied headers,但是你的C++代码中的一个(或者多个)文件并没有把 #include 或者 #include “pch.h” 作为代码文件的第一行。

我们建议的解决方法是关闭precomplied headers,在0.7节 – 编译你的首个程序中已经讲过了。

如果你偏好保留开启precomplied headers,那么修复该问题的方法也很简单,只要找到产生错误的文件(在上面的错误信息中,test.cpp是罪魁祸首了),并且添加如下行到文件最顶部就好:

#include "pch.h"

Visual Studio较老的版本会使用“stdafx.h”而非“pch.h”,所以如果pch.h无济于事的话,试试stdafx.h。

注意对于有多个文件的程序,每个C++代码都需要用该行作为开头。

所以说嘛,直接关掉precompiled headers就好了。


Q:Visual Studio给出了如下错误“1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)”(?invoke_main@@YAHXZ)”

你很有可能是创建了一个窗口图形应用(Windows graphical application)而非控制台应用(console application)。重新创建你的工程,并且保证将其创建为Windows(或Win32)Console project。


Q:当我编译我的程序时,我得到了警告信息“Cannot find or open the PDB file”(无法找到活打开PDB文件)

这是一个警告,而非错误,所以其不会影响你的程序。然而,它挺恼人的。若要修复它,采用Debug menu -> Options and Settings -> Symbols,勾选Microsoft Symbol Server。

其他问题


Q:我碰到其他的问题,我也没办法弄好,我该怎么快速找到答案呢?

当你把我们的材料详细看过后,毫无疑问,你还是会有问题或是碰到运行的未知问题。那么怎么办呢?这依据你的问题而定啊,但一般而言,你可以尝试如下操作。

首先,问Google啊。找到较好的方式来表达你的问题,进行Google搜索。如果你收到了错误信息,将这些信息用引号粘贴到google中。有可能别人也碰到了同样的问题,而且给你准备好了答案哦。

如果没有奏效的话,在Q&A模块去提问吧。有网站专门设计来做编程提问和回答的,像是Stack Overflow(栈上溢)。试着把你的问题公布出去,记住要透彻阐明你的问题是什么,并且包含所有相关的信息,比如你用的什么操作系统,你用的什么IDE。

梅冠华-2019-05-22
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第8节
https://www.learncpp.com/cpp-tutorial/a-few-common-cpp-problems/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值