VC++常见调试错误

调试方式: F9设置断点  F10单步执行 

                    光标移动到一个代码段 ctrl+ F10 执行

                    F5直接运行

常见错误:   

1fatal error C1010: unexpected end offile while looking for precompiled header directive

寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h"

2fatal error C1083: Cannot openinclude file: 'R…….h': No such file or directory

不能打开包含文件“R…….h”:没有这样的文件或目录。

3error C2011: 'C……': 'class' type redefinition

类“C……”重定义。

4error C2018: unknown character'0xa3'

不认识的字符'0xa3'。(一般是汉字或中文标点符号)

5error C2057: expected constantexpression

希望是常量表达式。(一般出现在switch语句的case分支中)

6error C2065: 'IDD_MYDIALOG' :undeclared identifier

IDD_MYDIALOG”:未声明过的标识符。

7error C2082: redefinition of formalparameter 'bReset'

函数参数“bReset”在函数体中重定义。

8error C2143: syntax error: missing':' before '{'

句法错误:“{”前缺少“;”。

9error C2146: syntax error : missing';' before identifier 'dc'

句法错误:在“dc”前丢了“;”。

10error C2196: case value '69' alreadyused

69已经用过。(一般出现在switch语句的case分支中)

11error C2509: 'OnTimer' : memberfunction not declared in 'CHelloView'

成员函数“OnTimer”没有在“CHelloView”中声明。

12error C2511: 'reset': overloadedmember function 'void (int)' not found in 'B'

重载的函数“void reset(int)”在类“B”中找不到。

13error C2555: 'B::f1': overridingvirtual function differs from 'A::f1' only by return type or calling convention

B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。

14error C2660: 'SetTimer' : functiondoes not take 2 parameters

SetTimer”函数不传递2个参数。

15warning C4035: 'f……': no return value

f……”的return语句没有返回值。

16warning C4553: '= =' : operator hasno effect; did you intend '='?

没有效果的运算符“= =”;是否改为“=”?

17warning C4700: local variable'bReset' used without having been initialized

局部变量“bReset”没有初始化就使用。

18error C4716: 'CMyApp::InitInstance': must return a value

CMyApp::InitInstance”函数必须返回一个值。

19LINK : fatal error LNK1168: cannotopen Debug/P1.exe for writing

连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)

20error LNK2001: unresolved externalsymbol "public: virtual _ _thiscall C……::~C……(void)"

连接时发现没有实现的外部符号(变量、函数等)。

 

---------------------------------------------------------------------------------------------

error LNK2001: unresolved external symbol _main

error LNK2001: unresolved external symbol _main解决办法

 

解决外部符号错误:_main,_WinMain@16,__beginthreadex )

在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数,就会在编译时产生很多连接错误,errorLNK2001错误, 典型的错误提示有:

libcmtd.lib(crt0.obj) : error LNK2001: unresolvedexternal symbol _main

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved externalsymbol _WinMain@16

msvcrtd.lib(crtexew.obj) : error LNK2001: unresolvedexternal symbol _WinMain@16

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolvedexternal symbol __beginthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolvedexternal symbol __endthreadex n

 

1. Windows子系统设置错误,提示:

libcmtd.lib(crt0.obj) : error LNK2001: unresolvedexternal symbol _main

 

Windows项目要使用Windows子系统,而不是Console, 可以这样设置:

 

[Project] --> [Settings] --> 选择"Link"属性页,

Project Options中将/subsystem:console改成/subsystem:windows 

 

2. Console子系统设置错误,提示:

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolvedexternal symbol _WinMain@16

 

控制台项目要使用Console子系统,而不是Windows, 设置:

 

[Project] --> [Settings] --> 选择"Link"属性页,

Project Options中将/subsystem:windows改成/subsystem:console

 

3. 程序入口设置错误,提示:

msvcrtd.lib(crtexew.obj) : error LNK2001: unresolvedexternal symbol _WinMain@16

 

通常, MFC项目的程序入口函数是WinMain,如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup,所以需要重新设置程序入口:

 

[Project] --> [Settings] --> 选择"Link"属性页,

Category中选择Output,

再在Entry-point symbol中填入wWinMainCRTStartup,即可

 

4. 线程运行时库设置错误,提示: @: kAF n

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolvedexternal symbol __beginthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolvedexternal symbol __endthreadex

 

这是因为MFC要使用多线程时库,需要更改设置:

 

[Project] --> [Settings] --> 选择"C/C++"属性页, ')

Category中选择Code Generation,

再在Use run-time library中选择DebugMultithreaded或者multithreaded

 

其中,

Single-Threaded                    单线程静态链接库(release版本)

Multithreaded                      多线程静态链接库(release版本)

multithreaded DLL                  多线程动态链接库(release版本)

Debug Single-Threaded              单线程静态链接库(debug版本)

Debug Multithreaded                多线程静态链接库(debug版本)

Debug Multithreaded DLL            多线程动态链接库(debug版本)

 

单线程: 不需要多线程调用时,多用在DOS环境下

多线程: 可以并发运行

静态库: 直接将库与程序Link,可以脱离MFC库运行

动态库: 需要相应的DLL动态库,程序才能运行

release版本: 正式发布时使用

debug版本: 调试阶段使用

-------------------------------------------------------1.Windows子系统设置错误,提示:

libcmtd.lib(crt0.obj) : error LNK2001: unresolvedexternal symbol _main

Windows项目要使用Windows子系统,而不是Console, 可以这样设置:

[Project] --> [Settings] --> 选择"Link"属性页,

Project Options中将/subsystem:console改成/subsystem:windows

--------------------------------------------------------

看上去,你应该是建立了一个控制台工程,但是你没有定义main函数,所以会出现这样的错误。写个main函数。

如果你定义的是Win32应用程序,并且定义了WinMain函数,那么按照楼上的方法,把“子系统”选项调整为Windows

 

-----------------------------------------------------------------------------------------------------------

 

1:使用vc开发项目时,常会遇到这种情况:

即明明只改动了一个文件,却要把整个项目全部重新编译连接一次。刚刚连接好,一运行,又提示重新编译连接一次,非常讨厌。这是因为出现了未来文件的缘故。

解决方法:

找出对应文件夹下的debug目录,将未来文件全部delete,rebuild all一次。(未来文件即其创建和修改时间都比系统时间靠后)

 

2:有时,workspace中的classview显示混乱。其表现如下:

(1):添加的成员变量或函数不能显示;

(2):即使显示出来了变量或函数,双击后不能跳至正确的位置。

解决方法:

删除.ncb文件,再rebuild all.

 

3:如何干净的删除一个类?

1:先从workspace中的fileview中删除对应的.h.cpp文件。

2.再关闭项目,从实际的文件夹中删除对应的.h.cpp文件。

3.再删除.clw文件。

打开项目,rebuild all

 

4:初学者常有这样的疑惑:

直接望工程文件里加入一个cpp原文件再编译连接的话老是提示没有找到预编译头

解决方法:

#include stdafx.h

 

5:如何向项目中加入自己定义的类?

方法很多,介绍一个简便的:

选择insert/new class菜单

弹出对话框;

选择class typegeneric;

输入类名。

当然,也可以自己决定该类的基类

 

6:如何在工作区(workspace)导入多个项目(project)?

在打开一个项目(*.dsp文件)后,在利用”project” 菜单下insert project into workspace子菜单选择另一个项目文件(*.dsp文件),可插入另一个项目。

classview 视图中,右键可以激活其中某个项目,工作区插入多个项目能方便不同项目间拷贝代码、资源等。

 

7: classview视图中类太多如何整理?

我们可以在classview 视图中右键新建文件夹(newfolder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了。

 

--------

 

win32 console or application 下添加下面最简单的c++程序:

 

#include

 

int main()

 

{

 

return 0;

 

}

 

编译却通不过:经常会碰到“fatal error C1010: unexpected end of file”的错误

 

解决办法是:

 

菜单--〉项目--〉设置...,出现“项目设置”对话框,左边展开项目,在“源文件”中找到出错的文件,然后在右边选择“C/C++”属性页,在分类下拉框中选择“Precompiled Headers”,然后在下面选择“Not using precompiled headers”,重新编译一般就没问题了。

 

注意:.C 文件不能包含stdafx.h头文件。

你可能感兴趣的:(VC)