【vb精品源码栏目提醒】:网学会员鉴于大家对vb精品源码十分关注,论文会员在此为大家搜集整理了“C++常见编译链接错误即解决方法 - 其它资料”一文,供大家参考学习
C课程上机实验常见错误汇集1. 在
源码中遗失“;”调试器错误信息:syntax error : missing 2. 缺少命名空间使用定义:即缺少“using namespace std”调试器错误信息:例:error C2065: cout : undeclared identifier例如 cout/cin/endl/ltlt/gtgt等在命名空间中定义的符号和标示符无法使用。
3. 变量未定义就直接使用调试器错误信息:例:error C2065: i : undeclared identifier C语言中,变量的使用必需遵循先声明定义,后使用的原则。
4. 在程序中使用中文标示符,如将英文””错误输入成了”;”调试器错误信息:error C2018: unknown character 0xa3在 C中,除程序注释可以采用中文外,其余字符要求使用英文。
不少同学在建立工程或程序名称时也使用中文名称,建议改掉这种习惯。
5. 在使用输入输出流的时候错误使用了标示符“gtgt”“ltlt”例 coutgtgta调试器错误信息:例:error C2676: binary gtgt : classstd::basic_ostreamltcharstructstd::char_traitsltchargtgt does not definethis operator or a conversion to a type acceptable to the predefinedoperator对于流操作的方向搞错是一个普遍错误,问题本来并不复杂,可能是由于没有认真看书的原因。
6. 定义的变量类型与使用不对应,如声明为 float,但实际给与了一个 double的值,例:float pi3.412345245656245调试器错误信息:warning C4305: initializing : truncation from constdouble to float7.变量在赋值之前就使用,例:int a b c cab cingtgtagtgtb 调试器错误信息:warning C4700: local variable a used withouthaving been initialized 出现这种错误主要是对面向过程的程序执行没有理解。
8. 在一个工程中包含多于一个的 main 函数error C2556: int __cdecl mainvoid : overloaded function differs onlyby return type from void __cdecl mainvoid E:tempalskdfldid.cpp4 : see declaration of mainE:tempalskdfldid.cpp15 : error C2371: main : redefinitiondifferent basic types在上机课中始终有同学犯这种错误,原因可能是从来没有上过机。
9. 在函数定义的()后面使用分号例:voidchang …调试器错误信息:error C2447: missing function header old-style formallist10. 函数声明/定义/调用参数个数不匹配.例:voidchangintaint b float c …void main … chang34 调试器错误信息:error C2660: chang : function does not take 2 parameters最常见的 20 种 VC编译错误信息1、 atal error C1010: unexpected end of file while looking forprecompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
(一般是没有includequotstdafx.hquot)2、fatal error C1083: Cannot open include file: R…….h: No such fileor directory不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: C……: class type redefinition类“C……”重定义。
4、error C2018: unknown character 0xa3不认识的字符0xa3。
(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。
(一般出现在 switch 语句的 case 分支中)6、error C2065: IDD_MYDIALOG : undeclared identifier“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter bReset函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing : before 句法错误:“”前缺少“;”。
9、error C2146: syntax error : missing before identifier dc句法错误:在“dc”前丢了“;”。
10、error C2196: case value 69 already used值 69 已经用过。
(一般出现在 switch 语句的 case 分支中)11、error C2509: OnTimer : member function not declared in CHelloView成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: reset: overloaded member function void int notfound in B重载的函数“void resetint”在类“B”中找不到。
13、error C2555: B::f1: overriding virtual function differs from A::f1only by return type or calling convention类 B 对类 A 中同名函数 f1 的重载仅根据返回值或调用约定上的区别。
14、error C2660: SetTimer : function does not take 2 parameters“SetTimer”函数不传递 2 个参数。
15、warning C4035: f……: no return value“f……”的 return 语句没有返回值。
16、warning C4553: : operator has no effect did you intend 没有效果的运算符“ ”;是否改为“”?17、warning C4700: local variable bReset used without having beeninitialized局部变量“bReset”没有初始化就使用。
18、error C4716: CMyApp::InitInstance : must return a value“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing连接错误:不能打开 P1.exe 文件,以改写内容。
(一般是 P1.Exe 还在运行,未关闭)20、error LNK2001: unresolved external symbol quotpublic: virtual _ _thiscallC……::C……voidquot连接时发现没有实现的外部符号(变量、函数等)。
VC6.0 使用步骤如下新建工程—添加文件—编译—链接---运行1.创建工程、文件并输入源程序代码(1)新建 Win32 Console Application 工程选择 file-gtnew选择 Projects-gtWin32Console Application 标签ps:在 location 位置可选择工程的创建位置。
选择 An empty project 然后选择 finish弹出如图,单击 OK 即可ps:点击左边的工程信息右下角的“FileView”选项;可以看到你新建的工程,再双击你新建的工程名 可以查看工程的信息。
其中,Source Files 为包含所有工程的源文件,Header Files 为包含所有工程的头文件 。
2在工程中新建 C 源程序文件并输入源程序代码添加
源码到 add 工程ps:建立源文件,选择“C Source ”,简单的程序都是建立这种文件的在单文件工程中使用, 如果要建立头文件的话, 从而产生.cpp 文件。
选择“C/C Header File”在多文件工程中使用,可产生.h 文件。
然后添加文件名称。
了解:文件扩张名是.h 的文件代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等; 文件扩张名为.cpp 的文件代表的是源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数 main ),包含了核心代码。
此时,相关工程和文件已经创建完成,可以进行输入
源码并编译链接运行。
(3)输入源程序代码源程序代码如下:2.编译、链接及运行运行结果如下所示:ps:虽然有快速的直接敲
源码,然后编译时再保存,但是编写程序最好按照工程流程操作。
如果是您有代码如:cpp 文件,或 .h 文件,想添加都 VC6.0里来测试的话,可以这样做:(1)按上面步骤建立一个简单的工程(2)在源文件选项“Source Files ”,右键单击中的“添加目录到工程”,添加你要打开的扩展名为 .cpp 的源文件。
在头文件选项“ Header Files”,右键单击中的“添加目录到工程”,添加你要打开的扩展名为 . h 的头文件。
添加完你所有的头文件和源文件之后,检查一下是否添加完毕,之后就可以编译了。
3.对一个简单程序的调试过程 1. 假设准备编制进行如下计算任务的一个简单程序:在已知 x3、y5 的情况下,先计 算出 x 与 y 的和 s,差 d,商 q,模 r,而后计算 ress2d3q4r 的值res 应该等于 16并显示在屏幕上。
但编制的如下程序运行后却得出了一个错误结果“res26”。
1. include ltstdio.hgt 2. void main 3. 4. int x3 y5 5. int s d q r res 6. s x y 7. d s - y 8. q x / y 9. r x y 10. res s 2d 3q 4r 11. printfquotresdnquot res 12. 复制代码 分析上述所编制的程序行,假设能在要输出 res 结果值的那一程序行倒数第二行处设置一个临时断点,让程序先执行到此断点处注意设为断点的那一行尚未被执行!,看一看那时各变量的动态取值情况,有可能就会找到出错的原因!基于上述分析,先将鼠标光标移动到“printfquotresdnquot res”那一行处左键单击那一行任意位置,从而指定了临时性断点的行位置,而后执行“Build→StartDebug→Run to Cursor”选项,使程序运行到所指定行时暂停其执行,并显示出如图 3-2 的界面,其中的左下方窗口中就列出了当时各变量的取值情况:和 s8,差 d3x3,y5,它们的差 d3 肯定是错误的!,商 q0,模 r3,最终结果 res26。
再仔细查看程序中负责计算差 d 的那一个语句“ds-y”就会恍然大悟,原来将“x-y”误写成了“s-y”!找到了错误,此时可以通过菜单选项“Debug→Stop Debugging”,中断当前的调试过程并返回正常的编辑状态,修改所发现的错误后,再一次执行将能得出正确结果“res16”。
顺便指出,图 3-2 中显示的变量是“自动查看”方式的,即 VC6 自动显示当前运行上下文中的变量的值。
如果变量比较多,自动显示的窗口比较混乱,则可以在 Watch列表中添加自己想要监控的变量名。
上述设置临时断点到鼠标光标那一行处的调试手段使用起来很方便,会经常使用也经常在到达一个断点后,又设置另一个新的临时断点。
另外也常配合使用“单步执行”的方式,来仔细检查每一步一个程序行执行后各变量取值的动态变化情况,如,先通过“Run to Cursor”执行到某一个鼠标光标临时断点行处,而后通过使用 Debug 菜单的“Step Over”或“Step Into”来进行所谓的“单步执行”,当然,每执行一步后,都要仔细观察并分析系统自动给出的各变量取值的动态变化情况,以便及时发现异常而找到出错原因。
4.如何对 C 语言设计合适的程序调试方案让我们来分析并设计对如下程序进行调试的具体方法与手段实际上,对不同的程序,都需要在分析其执行结果以及其程序编写结构的基础上,来设计相应的对其进行具体调试的方法与手段,宗旨是想方设法逐步缩小“侦察”范围,直到最后找到出错位置。
该程序除 main 外,还有一个自定义函数 f。
若已经能确认调用 f 函数前计算出的 res值或 s、d、q 或 r 其中之一的结果值不正确的话,则可像上一程序那样,在计算出res 变量值的下一行或在靠前一些的某一行处设置断点,看到达那一断点处是否一切正常。
若到达断点处的数据结果已经不正常的话,错误已经出现出现在跟前或出现在前面,从而找到了错误或者缩小了“侦察”范围;若断点处仍然正常,可断言错误出现在后面,而后,①可又一次通过鼠标光标往更靠后一些的适当位置设置新断点,再一次“Debug→Run to Cursor”一下向后“迈”过了许多行,再继续“侦察”!;②通过“单步执行”Debug→StepOver,在重点怀疑的那一块地方仔细地逐行进行“侦察”。
注意,“Step Over”不会“跟踪”进入 f 函数内部,若怀疑 f 函数可能有问题的话,要通过使用“Debug→Step Into”进入 f 内部再进行细致调试在不遇到函数调用的地方,“Step Over”与“Step Into”的功能是相同的。
若通过“Step Into”进入到函数内部,单步执行若干步之后,若发现不再需要进行单步调试的话,可通过“Step Out”从函数内部返回到调用语句的下一语句处。
此外设置固定性断点最简单的方法是:在某一程序行处,单击鼠标右键,在菜单中选择“Insert/Remove Breakpoint”项通过左键单击该选项,此时该行前将出现一个圆形的黑点标志,意味着已经将该行设置成了固定断点。
清除固定性断点的方法为:在具有圆形黑点标志的固定断点行处,单击鼠标右键,在菜单中选择“Remove Breakpoint”项通过左键单击该选项,此时该行前的那一个圆形黑点标志将消失,意味着已经清除了该固定断点。
设置了固定性断点后,通常通过“Build→Start Debug→Go”或“Debug→Go”选项使程序开始执行,直到遇到某断点或遇到程序结束而停止。
还要说明的是,可以随时设置任意多个固定性断点,也可以随时清除它们。
通过使用菜单选项“Edit→Breakpoints”,会出现一个对话框,在其中的“Break at”文本框中键入要设置断点的程序行的行数信息但通常是先通过鼠标光标选定某一程序行,再利用菜单选项进入上述对话框,而后通过点击“Break at”文本框右边的小三角按钮,并选定系统自动提供的程序行的行数,以免自己要真正地去数清楚那一行的行数,也能够在指定行处设置一个固定性断点通过 OK 按钮确定;如果要清除某断点,可在“Breakpoints”列表栏中先选定它,之后单击 Remove 按钮。
实际上,除位置断点外,通过“Edit→Breakpoints”,还可以设置数据断点,消息断点,以及条件断点等,这儿就不再细说了。
5.优秀 C 程序员的基本素质——丰富的想象、严谨的思维1程序运行结果看起来对了,但并不意味着程序没有隐藏的问题①以下程序是从键盘输入一个数x,x 是一个 int 型整数,计算 yy1000x9并在屏幕上输出,程序基本上是对的,能输出正确的结果。
13. include ltstdio.hgt 14. void main 15. 16. int x y 17. printfquotPlease input x:quot 18. scanfquotdquot ampx 19. y 1000x 9 20. printfquotydnquot y 21. 22. 但是,当 x 输入为 5000000,屏幕上却输出 y705032713,出现了错 误。
23.复制代码②以下程序的功能是从键盘上读入一串字符,然后在屏幕上输出。
24. include ltstdio.hgt 25. void main 26. 27. char str10 28. printfquotPlease input str:quot 29. scanfquotsquot ampstr 30. printfquotstrsnquot str 31. 复制代码若用户在输入 str 时不小心多按了或无意碰触几下键盘,则程序运行会出错,如图3-3 所示——可能稍严重的是程序运行死机不报错,特别严重的是若有人精心设计输入的字符,完全可能造成系统被入侵或被严重破坏。
③以下程序的功能是从计算班中男生boy和女生girl的比例。
如果女生数为 0 时,程序会怎样? 32. include ltstdio.hgt 33. void main 34. 35. int boy girl 36. printfquotPlease input boygirl:quot 37. scanfquotddquot ampboy ampgirl 38. printfquotboy/girl.2fnquot boy1.0/girl 39. 复制代码实际工作中,类似的隐藏的问题往往是破坏力巨大的“地雷”,往往造成极大的损失,例如火箭发射、宇宙飞船飞行、高速列车运行中的事故,我们平常接触最多的恐怕是微软的各种系统需要不断地打补丁。
因此,在程序设计中,必须缜密考虑各种情况,哪怕是机率极小的意外。
2严谨思维的典范——程序员学习的榜样丰富的想象力、严谨的思维是一个优秀的程序应当具备的素质。
设计程序时不要拘泥于固定的思维方式, 遇到问题的时候要多想几种解决问题的方案,并且考虑全面、思维严谨。
以下 2 个小故事,应当是一个优秀程序员的标准思维,它形象、幽默、充分地展示了一个优秀程序员的严谨、全面的思维。
一个优秀的程序员只有这样思考并设计程序,才能保证程序始终能可靠、稳定地工作,减少和避免发生事故。
①方程仅仅对于正实数的简单情形成立物理教授走过校园,遇到数学教授。
物理教授在进行一项实验,他总结出一个经验方程,似乎与实验数据吻合,他请数学教授看一看这个方程。
一周后他们碰头,数学教授说这个方程不成立。
可那时物理教授已经用他的方程预言出进一步的实验结果,而且效果颇佳,所以他请数学教授再审查一下这个方程。
又是一周过去,他们再次碰头。
数学教授告诉物理教授说这个方程的确成立, quot但仅仅对于正实数的简单情形成立。
quot②判断开枪后树上还有几只鸟某日,老师在课堂上想看看一学生智商有没有问题,问他 “树上有十只鸟,开枪打死一只,还剩几只?”他反问“是无声手枪或别的无声的枪吗?”例如激光枪“不是。
”“枪声有多大?”“80-100 分贝。
”“那就是说会震的耳朵疼?”“是。
”“在这个城市里打鸟犯不犯法?”“不犯。
”“您确定那只鸟真的被打死啦?”“确定。
”偶已经不耐烦了“拜托,你告诉我还剩几只就行了,OK”“OK,树上的鸟里有没有聋子?”“没有。
”“有没有关在笼子里的?”“没有。
”“边上还有没有其他的树,树上还有没有其他鸟?”“没有。
”“有没有残疾的或饿的飞不动的鸟?”“没有。
”“算不算怀孕肚子里的小鸟?”“不算。
”“打鸟的人眼有没有花?保证是十只?”“没有花,就十只。
” 偶已经满脑门是汗,且下课铃响,但他继续问“有没有傻的不怕死的?”“都怕死。
”“会不会一枪打死两只?”“不会。
”“所有的鸟都可以自由活动吗?”“完全可以。
”“如果您的回答没有骗人,”学生满怀信心的说,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。
”老师当即晕倒。
6.VC6.0 常见编译错误提示1error C2001: newline in constant编号:C2001直译:在常量中出现了换行。
错误分析: 40. ①字符串常量、字符常量中是否有换行。
41. ②在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
42. ③在这语句中,某个字符创常量中是否出现了双引号字符“quot”,但是没有使用 转义符“quot”。
43. ④在这句语句中,某个字符常量的尾部是否漏掉了单引号。
44. ⑤是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2error C2015: too many characters in constant编号:C2015直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有且只能有一个字符使用转义符时,转义符所表示的字符当作一个字符看待,如果单引号中的字符数多于 4 个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if x x x y … 值得注意的是,如果单引号中的字符数是 2-4 个,编译不报错,输出结果是这几个字母的 ASC 码作为一个整数int,4B整体看待的数字。
3error C2137: empty character constant编号:C2137直译:空的字符定义。
错误分析:原因是连用了两个单引号,而中间没有任何字符,这是不允许的。
4error C2018: unknown character 0x编号:C2018直译:未知字符‘0x’。
错误分析:0x是字符 ASC 码的 16 进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
5error C2041: illegal digit for base 8编号:C2141直译:在八进制中出现了非法的数字‘’这个数字通常是 8 或者 9。
错误分析:如果某个数字常量以“0”开头单纯的数字 0 除外,那么编译器会认为这是一个 8 进制数字。
例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。
6error C2065: xxxx : undeclared identifier编号:C2065直译:标识符“xxxx”未定义。
错误分析:首先,解释一下什么是标识符。
标志符是程序中出现的除关键字之外的词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写。
变量名、函数名、类名、常量名等等,都是标志符。
所有的标志符都必须先定义,后使用。
标志符有很多种用途,所以错误也有很多种原因。
45. 如果“xxxx”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼 写错误、大小写错误所引起的,所以,首先检查变量名是否正确。
关联:变 量,变量定义 46. 如果“xxxx”是一个函数名,那就怀疑函数名是否没有定义。
可能是拼写错误 或大小写错误,当然,也有可能是你所调用的函数根本不存在。
还有一种可 能,你写的函数在你调用所在的函数之后,而你有没有在调用之前对函数原 形进行申明。
关联:函数申明与定义,函数原型 47. 如果“xxxx”是一个库.
上一篇:
2012年上海市高中《信息科技》学业水平考试1
下一篇:
试题库管理系统毕业论文