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、引用數組元素下標錯誤等。靜態錯誤是之編譯階段發現的程序錯誤,可分為語法錯誤和靜態語義錯誤,如單詞拼寫錯誤、標點符號錯誤、表達式缺少操作數、括弧不匹配等有關語言結構上的錯誤稱為語法錯誤,而語義分析時發現的運算符與運算對象不合法等錯誤屬於靜態語義錯誤。語義分析階段主要檢查源程序是否包含靜態語義錯誤,而一般的編譯器很難檢查出動態語義錯誤。