0.7常见C++问题解答

这一节我们将讨论一些新手程序员有很高几率碰到的问题。篇幅所限,无法列出全部问题,暂为一些基本的问题提供务实的解决方案,后续也会根据读者的需求加以补充,欢迎提问。

问题一:从IDE运行程序时,控制台窗口闪烁一下然后迅速关闭怎么办?

答:某些编译器在程序运行结束后不会自动暂停,比如Bloodshed的Dev C++。如果遇到这种情况,采取以下两步即可解决问题:首先在程序开头添加:#include<iostream>,在main函数的末尾,返回语句(例如return 0)之前添加如下代码:

std::cin.clear(); // 重置所有错误标识

std::cin.ignore(32767, '\n'); // 在键入下一个字符前忽略所有输入缓冲区的字符

std::cin.get(); // 等待从用户处获取输入

这样程序在继续运行之前会等待你的输入,让你在窗口关闭之前有时间看到输出结果。

其他的解决方案,例如常有人建议使用的system(“pause”);语句,我们是不推荐使用的,因为它只能工作在特定的操作系统上。

注:Visual Studio中,调试(Debug-> Start Debugging,调试->开始调试)状态下控制台程序运行到最后也不会暂停。如果你想程序暂停,可以使用上面的方法,或者运行Debug ->Start Without Debugging(调试->开始执行(不调试))。

问题二:使用Microsoft Visual C++编译程序时收到如下错误提示:“c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive”(致命错误C1010:寻找预编译头文件时遇到意外的文件结尾)

答:这个错误发生在Microsoft Visual C++编译器被设置为使用预编译头文件,但你却没有在程序的开头引用stdafx头文件,解决这个问题的方法是,根据错误提示确定产生错误的文件(例如上面提示为test.cpp),然后在该文件的第一行添加如下代码:

#include "stdafx.h"

注意如果程序包含多个文件,那么每一个C++文件都需要以此开头。

或者,你也可以选择关闭预编译头文件。

问题三:当时用cin、cout、endl时,编译器提示cin、cout、endl为“undeclared identifier”(未定义的标识符)。

答:首先确保程序中添加了#include <iostream>语句。然后,确保cin、cout、endl有前缀std::,例如:

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

问题四:当使用endl作为换行符时,编译器提示“end1 is an undeclared identifier”(end1为未定义的标识符)。

答:确保你没有把endl中的小写字母l(L)写成数字1,推荐可以明确区分小写的L,大写的i,数字1的编程字体,非编程字体也难以区分字母O和数字0。

问题五:我的程序编译成功但不能正常工作(运行时出错、输出错误等等)怎么办?

答:这就需要调试程序了,你可以查看第一章,尤其是第一章中的1.11节调试程序(步进和断点)和1.11a调试程序(看变量和调用堆栈)。

问题六:如何打开Visual Studio中的显示行号功能?

答:点击工具栏中的tools->options(工具->选项),展开文本编辑器,点击C/C++中的常规选项,即可看到显示行号的复选框。

问题七:在Visual Studio 2010中编译程序遇到关于COFF文件无效的错误提示,怎么解决?

答:如果看到如下的错误信息: LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

你遇到了微软操作系统与编译器不兼容的错误,与你的代码无关。最好的选择是下载安装Visual Studio 2010 Service Pack 1(https://www.microsoft.com/en-us/download/details.aspx?id=23691&wa=wsignin1.0)。

如果仍然无法解决,可看看看Stack Overflow(http://stackoverflow.com/questions/10888391/error-link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-inval),上面有许多关于这个问题的产生原因和解决办法。

问题八:编译程序时遇到未解决的外部符号_main或者_WinMain@16的错误提示。

答:这意味着编译器无法找到main()函数,所有的程序都必须包含main()函数作为程序的入口。检查一下以下几个方面:

  • 代码中有名为main的函数吗?
  • main拼写正确吗?(有没有写成mian)
  • 你所编译的文件是否包含项目中的main部分,如果不包含,将main函数移动到其中或者将其添加到你的项目中。详见8节:多文件程序

问题九:编译程序时遇到警告warnings:“Cannot find or open the PDB file”( “无法找到或打开PDB文件”)。

答:这是警告,而非错误,不会影响程序的正常运行,但看着总是十分恼人。解决方法是点击Debug -> Options and Settings -> Symbols,检查“Microsoft Symbol Server”(调试->选项->符号->Microsoft符号服务器)。

问题十:我使用的是Code::Blocks(或者在命令行中使用g++),所有C++11的功能都无法正常使用,怎么办?

答:Code::Blocks中,到Project->Build options->Compiler settings->Compiler flags,检查“Have g++ follow C++11 ISO C++ language standard”,详情参看0.5节:安装集成开发环境IDE

如果在命令行上用g++编译,则添加以下命令:-std=c++11。

问题十一:Visual Studio中遇到如下错误提示:“1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ)”

答:这种情况很有可能是你创建的项目类型有问题,确保创建的项目为Win32 Console Application(Win32控制台应用程序),而不是Win32 Project(Win32项目)。

问题十二:运行程序时窗口出现,但却没有任何输出,是什么原因?该怎么办?

答:你的病毒扫描程序可能会阻止程序的运行,暂时禁用杀毒软件以确定是否是这个原因造成的。

我有其他无法解决的问题,在那可以快速得到答案呢?

答:跟随本教程学习的过程中,你无疑会遇到各种各样意想不到的问题,最好最快的办法是去专门的编程问题问答网站比如Stack Overflow,贴上你的问题,记得描述详细并附上使用的操作系统、IDE等相关信息。你也可以直接在本教程下方留言,我们或者其他读者也会尽力为你解答。

译者注:Visual Studio用户建议查看MSDN上的技术文档:https://msdn.microsoft.com/zh-cn/library/ms310241 。

转载请参看关于博客页面相关要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒满阳光的午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值