1. 求助,C++编译出错
应该给出具体的错误,才能帮你分析错误的原因。
下满是C++编译时最容易出现的错误:
1、fatal error C1010: unexpected end of file while looking for precompiled header directive.
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R……。h': No such file or 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)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention void function(e,t){for(var n=t.getElementsByTagName("img"),a=+new Date,i=[],o=function(){this.removeEventListener&&this.removeEventListener("load",o,!1),i.push({img:this,time:+new Date})},s=0;s< n.length;s++)!function(){var e=n[s];e.addEventListener?!e.complete&&e.addEventListener("load",o,!1):e.attachEvent&&e.attachEvent("onreadystatechange",function(){"complete"==e.readyState&&o.call(e,o)})}();alog("speed.set",{fsItems:i,fs:a})}(window,document);
类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 been initialized局部变量“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 "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)。
function call missing argument list 调用函数的时候没有给参数。 member function definition looks like a ctor, but name does not match enclosing class 成员函数声明了但没有使用
unexpected end of file while looking for precompiled header directive 在寻找预编译头文件时文件意外结束,编译不正常终止可能造成这种情况
2. 能解释下编译失败的原因吗
编译失败的原因有很多种。其中主要有以下一些类型:
(1)、用户编写的源程序中有语法错误。例如:未定义某一个变量就进行引用。这一类错误是最简单的,也是编译器最容易检查出来的,所以会产生对源程序的编译失败;
(2)、用户编写的源程序中有未对变量进行初始化就进行引用,也会导致程序运行错误。例如:用户虽然定义了一个指向某一个内存地址的指针变量,但是在使用前却未对它进行初始化,并进行任何判断,就往该指针指向的内存地址赋予了一个数值,这种情况在语法上编译器是检查不出来的,但是程序一旦运行起来,肯定就会出现错误了。在 WINDOWS 系统下一般是:指向XXXX的内存不能够为 Read (或者为 Write),要是在 UNIX/Linux 系统下就会发生 Core Dumped。
(3)、数组越界。这类错误也是编译器检查不出来的,但是一旦程序运行起来,程序的运行结果可能就是一个随机的结果。而不是用户需要得到的结果。
所以从编译的实质上说,以上情况都应该属于编译失败的类型。因为编译器并无法阻止这些错误的发生,而是让程序在运行时发生了各种各样的意想不到的运行结果。
相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。
异常是指程序在编译或运行过程出现的错误。
在java.lang包中Throwable包含了所有的异常。
Error (错误) 和Exception(异常)
(1)Error(错误)
一旦发生无法修复,但可以避免发生。
常见错误类:
IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。
VirtualMachineError:虚拟机错误,当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。
StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。
OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).
(2)Exception(异常)
一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。
异常的分类:
1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)
常见的异常有:
IOException:输入输出流异常
FileNotFoundException:文件找不到的异常
ClassNotFoundException:类找不到的异常
DataFormatException:数据格式化异常
NoSuchFieldException:没有匹配的属性异常
NoSuchMethodException:没有匹配的方法异常
SQLException:数据库操作异常
TimeoutException:执行超时异常
常见的运行时异常:
RuntimeException:运行时异常
NullPointerException:空指针异常
:数组越界异
ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配
以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception
既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。
(1) 如何处理编译时异常?
方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}
我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。
如以下代码:
从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。
在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?
Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它
的子类。
Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。
throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。
4. 瀛︾敓蹇呯湅Java甯歌佺殑阌栾鍙婇伩鍏嶆柟娉
Java甯歌佺殑阌栾鍙婇伩鍏嶆柟娉
1....钬淓xpected钬
褰扑唬镰佷腑缂哄皯镆愪簺涓滆タ镞讹纴浼氩彂鐢熸ら敊璇銆傞氩父鏄锲犱负缂哄皯鍒嗗彿鎴栧彸𨰾鍙枫
阃氩父锛屾ら敊璇娑堟伅涓崭细绮剧‘闂棰樼殑纭鍒囦綅缃锛屼负浜嗘垒鍒伴敊璇:纭淇濇墍链夌殑宸︽嫭鍙烽兘链変竴涓瀵瑰簲镄勫彸𨰾鍙枫
鍦ㄦ煡鐪嬫寚绀虹殑Java浠g爜琛屼箣鍓嶉‘渚跨湅鐪嬭屻傛eJava杞浠堕敊璇娌℃湁琚缂栬疟鍣ㄦ敞镒忓埌锛岀洿鍒板湪浠g爜涓镟存繁灞傛″湴鐪嬨
链夋椂涓涓瀛楃︼纴濡备竴涓宸︽嫭鍙凤纴骞朵笉搴旇ユ斁鍦↗ava浠g爜镄勫师鍏堜綅缃銆傛墍浠ュ紑鍙戜汉锻樻病链夐槻姝涓涓鍙虫嫭鍙锋潵骞宠𨰾鍙
2." Unclosed String Literal
濡傛灉瀛楃︿覆鏂囧瓧缁撴潫镞舵病链夊紩鍙风殑璇濓纴浼氩垱寤衡淯nclosed String Literal钬 镄勯敊璇淇℃伅锛屽苟涓旀秷鎭灏嗘樉绀轰笌阌栾鐩稿悓镄勮屼笂銆侺iteral 鏄鍊肩殑婧愪唬镰侀氩父銆傝繖绉嶆儏鍐靛彂鐢熷湪:瀛楃︿覆鏂囧瓧涓崭互寮曞彿缁у𪾢銆傝繖寰埚规槗绾犳o纴锷犱笂镓闇镄勫紩鍙凤纴闂钖埚瓧绗︿覆鏂囧瓧鍗冲彲銆
瀛楃︿覆鏂囧瓧镓╁𪾢瓒呰繃涓琛屻傞暱瀛楃︿覆鍙浠ュ垎瑙f垚瀛楃︿覆鏂囧瓧锛屽苟锷犱笂锷犲彿(钬+钬)銆伞备綔涓哄瓧绗︿覆鏂囧瓧涓閮ㄥ垎镄勫紩鍙蜂笉阃氲繃鍙嶆枩𨱒(钬溾) 杩涜岃浆涔夈
3. 钬 llegal Start of an Expression
鍑虹幇钬泪llengal Start of an Expression钬濋敊璇镄勫师锲犳湁寰埚氥傚洜姝ゅ悕鍒椾笉澶链夌敤镄勯敊璇娑堟伅涔嬩竴銆傛湁浜涘紑鍙戣呯敋镊宠や负杩欐槸鐢卞潖镄勪唬镰侀犳垚镄勚
銆傞氩父锛屽垱寤鸿〃杈惧纺鏄涓轰简鐢熸垚鏂扮殑鍊兼垨涓哄彉閲忓垎閰嶅笺傜紪璇戝櫒链熸湜镓惧埌琛ㄨ揪寮忥纴浣嗗洜涓鸿娉曚笉绗﹀悎棰勬湡钥屾垒涓嶅埌琛ㄨ揪寮忋傚湪杩欎簺璇鍙ヤ腑灏卞彲浠ュ彂鐜版ら敊璇
4."Cannot Find Symbol钬
Java涓镄勬墍链夋爣璇嗙﹂兘闇瑕佸湪琚浣跨敤涔嫔墠杩涜屽0鏄庛傚彂鐢熼敊璇镄勫师锲犲湪浜庣紪璇戜唬镰佹椂锛岀紪璇戝櫒涓嶆槑锏芥爣璇嗙︾殑钖涔夈
鍙鑳芥敹鍒扳淐annot Find Symbol钬濅俊鎭镄勫师锲犳湁寰埚:
路镙囱瘑绗﹀0鏄庢椂镄勬嫾鍐椤彲鑳藉湪浠g爜涓浣跨敤镞剁殑𨰾煎啓涓嶅悓銆
鍙橀噺浠庢湭琚澹版槑銆傚彉閲忎娇鐢ㄦ椂涓庡0鏄庢湭鍦ㄥ悓涓锣冨洿鍐呯被娌℃湁琚瀵煎叆
5.钬淧ublic Class XXX Should Be in File
褰 XXX绫诲拰Java绋嫔簭鏂囦欢钖崭笉鍖归厤镞讹纴浼氩彂鐢颎淧ublic Class XXX Should Be in File钬 娑堟伅銆傚彧链夊綋绫诲拰Java鏂囦欢鐩稿悓镞讹纴浠g爜镓崭细琚缂栬疟:涓鸿В鍐宠繖涓闂棰:銆傜被鍜屾枃浠跺懡钖岖浉钖屻傜‘淇濅袱钖岖О镄勬儏鍐典竴镊淬
6.钬泪ncompatible Types
钬泪ncompatible Types钬濇槸鎸囱鍙ュ皾璇曞皢鍙橀噺涓庣被鍨嬭〃杈惧纺閰嶅规椂鍙戠敓镄勯昏緫阌栾銆傞氩父浼氩湪浠g爜灏濊瘯灏嗘枃链瀛楃︿覆鏀惧叆鍒版暣鍨嬩腑镞跺嚭鐜帮纴鍙崭箣浜︾劧銆傝繖骞堕潪Java璇娉曢敊璇銆
褰撶紪璇戝櫒缁椤嚭钬泪ncompatible Types钬濇秷鎭镞讹纴灏变笉鏄绠鍗曚慨澶嶅彲浠ユ憜骞崇殑浜:銆傛湁鍙浠ヨ浆鎹㈢被鍨嬬殑鍑芥暟銆傚紑鍙戜汉锻桦彲鑳介渶瑕佹洿鏀逛唬镰侀勬湡镄勫姛鑳姐
7. 钬泪nvalid Method Declaration;Return TypeRequired
姝Java杞浠堕敊璇娑堟伅琛ㄧず鏂规硶绛惧悕涓链鏄庣‘澹版槑镄勬柟娉旷殑杩斿洖绫诲瀷銆
链夎嫢骞查斿缎浼氲Е鍙戋渘alid Method
Declaration;Return Type Required钬濋敊璇:銆傚缮璁板0鏄庣被鍨
濡傛灉鏂规硶娌℃湁杩斿洖鍊硷纴闾d箞闇瑕佸皢钬渧oid钬濆0鏄庝负鏂规硶绛惧悕涓镄勭被鍨
鏋勯犲嚱鏁板悕绉颁笉闇瑕佸0鏄庣被鍨嬨备絾鏄锛屽傛灉鏋勯犲嚱鏁板悕绉颁腑瀛桦湪阌栾锛岄偅涔堢紪璇戝櫒灏嗕细鎶婃瀯阃犲嚱鏁拌嗕负娌℃湁鍒跺畾绫诲瀷镄勬柟娉
8.钬淢ethod <X> in Class <Y> Cannnot BeApplied to Given Types
瀹冮槓鏄庝简鏂规硶绛惧悕姝e湪璋幂収阌栾镄勫弬鏁般傝皟鐢ㄧ殑鏂规硶链熷緟鏂规硶澹版槑涓瀹氢箟镄勬煇浜涘弬鏁般傛镆ユ柟娉曞0鏄庡苟浠旂粏璋幂敤锛屼互纭淇濆畠浠鏄鍏煎圭殑銆
9.钬 Missing Return Statement钬
褰扑竴涓鏂规硶娌℃湁杩斿洖璇鍙ユ椂锛屽氨浼氩嚭鐜扳淢issingReturn Statement钬 镄勬秷鎭銆傛疮涓杩斿洖鍊(闱瀡oid 绫诲瀷)镄勬柟娉曢兘蹇呴’链変竴涓瀛楅溃涓婅繑锲炶ュ肩殑璇鍙ワ纴浠ヤ究鍦ㄦ柟娉曚箣澶栬皟鐢ㄥ畠銆
缂栬疟鍣ㄦ姏鍑衡淢issing Return Statement钬濇秷鎭镄勫师锲犳湁鑻ュ共:杩斿洖璇鍙ョ敱骞查敊璇琚鐪佺暐銆
璇ユ柟娉曟病链夎繑锲炰换浣曞硷纴浣嗙被鍨媣oid 鍦ㄦ柟娉旷惧悕涓链澹版槑
10.钬淧ossible Loss of Precision
褰撴洿澶氱殑淇℃伅琚鍒嗛厤缁欎竴涓鍙橀噺钥岃秴杩囧畠镄勫归噺锛屽氨浼氩彂鐢颎淧ossible Loss Precision钬 娑堟伅銆傚傛灉鍑虹幇杩欑嶆儏鍐碉纴闾d箞纰庣墖灏变细琚镓旀帀銆傚傛灉杩欐牱娌℃湁鍏崇郴锛岄偅涔堜唬镰侀渶瑕佸皢鍙橀噺鏄剧ず澹版槑涓烘柊镄勭被鍨嬨傗淧ossible Loss of Precision钬濋氩父鍙戠敓鍦:灏濊瘯涓烘暣鏁版暟鎹绫诲瀷镄勫彉閲忓垎閰崭竴涓瀹炴暟灏濊瘯涓烘暣鏁版暟鎹绫诲瀷镄勫彉閲忓垎閰崭竴涓猟ouble銆
5. 关于C语言在编译时常出现的错误有哪些
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or 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)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only 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 been initialized
局部变量“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 "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)。
function call missing argument list 调用函数的时候没有给参数。
member function definition looks like a ctor, but name does not match enclosing class 成员函数声明了但没有使用
unexpected end of file while looking for precompiled header directive 在寻找预编译头文件时文件意外结束,编译不正常终止可能造成这种情况
6. C++中逻辑错误、语法错误、编译错误分别出现什么情况
编译错误:
(1)警告:可运行,但结果有可能不正确
(2)错误:无法生成可执行文件
语法错误:无法生成可执行文件
逻辑错误:可运行,但结果很可能错误
7. 编译程序可发现源程序全部的什麽错误和部分的什麽错误
编译程序可发现源程序全部的“语法”错误和部分的“语义”错误。
特意找了详细解释帮你理解:用户编写的源程序不可避免的会有一些错误,这些错误大致可以分为静态错误和动态错误。动态错误也称动态语义错误,它们发生在程序运行时,例如除数为0、引用数组元素下标错误等。静态错误是之编译阶段发现的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错误、表达式缺少操作数、括号不匹配等有关语言结构上的错误称为语法错误,而语义分析时发现的运算符与运算对象不合法等错误属于静态语义错误。语义分析阶段主要检查源程序是否包含静态语义错误,而一般的编译器很难检查出动态语义错误。