Ⅰ printf列印strlen(ch2),編譯警告,是為什麼
strlen函數的返回值是個 unsigned int ,而%d是int格式輸出,所以會有警告,用%u格式就不會有警告了:
printf("strlen(ch2)=%u",strlen(ch2));
Ⅱ 我的編譯器vc++6.0出現了下面的問題:出現一個error,是編譯器錯誤么
代碼將產生此錯誤信息,如果它引用了(如函數,變數或標簽) ,該連接器無法找到所有的圖書館和目標文件它的搜索。一般情況下,有兩個原因發生此錯誤:什麼代碼要求不存在(符號拼寫錯誤或使用了錯誤的情況下,例如) ,或要求的代碼錯誤的(您使用的是混合版本圖書館?一些從一個版本的產品,另一些從另一個版本) 。
無數種編碼和編譯錯誤可能會導致LNK2001 。有幾個具體原因下面列出,一些有聯系的更詳細的解釋。
編碼問題
不匹配的情況下在您的代碼或模塊定義( 。畫質)文件可能會導致LNK2001 。例如,如果您命名一個變數「 var1 」在一個C + +源文件,並嘗試使用它作為「 VAR1 」在另一個,你會收到此錯誤。解決辦法是完全匹配的情況下,文中所有提及。
一個項目,使用功能內嵌尚未確定了職能。 cpp文件,而不是在頭文件可能會導致LNK2001 。
如果您使用的是C + +中,請確保使用外部的「 C 」時調用C函數的C + +程序。通過使用外部的「 C 」您的使用武力的C命名約定。了解編譯器開關一樣/總蛋白或/鍀武力將文件編譯為一個C ( /技術合作)或C + + ( /總蛋白)檔案不管文件擴展名,或者您可能會得到不同的函數名比您預期的。
試圖參考功能或數據不具備的外部聯系的原因LNK2001 。 C + +中,內置的功能和構造數據內部的聯系,除非明確指定為外部。
丟失函數機構或變數會導致LNK2001 。剛剛一個函數原型或外部宣言將使編譯繼續,沒有錯誤,但鏈接將無法解決您的電話的地址或參考變數,因為沒有功能代碼或變數空間保留。
姓名裝修採用參數的函數進入最後裝飾功能名稱。調用一個函數的參數類型不匹配是在函數聲明可能會導致LNK2001 。
錯誤包括原型將導致編譯預期功能的機構,不提供。如果您同時擁有一類和非類執行函數F ,小心C + +的范圍內解決的規則。
當使用C + +中,一定要包括執行特定功能的一類,而不只是一個原型的類的定義。
試圖調用一個純虛函數的構造函數或析構函數的抽象基類將導致LNK2001因為按照定義一個純虛函數沒有基類執行。
全球唯一的函數和變數是公開的。
職能宣布與靜態修飾的定義文件的范圍。靜態變數具有相同的限制。試圖訪問任何靜態變數以外的文件,他們被宣布可能會導致出現一個編譯錯誤或LNK2001 。
一個變數的函數內宣布(一局部變數)只能使用范圍之內的這一職能。
C + +的全球靜態常量有聯系。這是不同於c.如果您嘗試使用全球不斷在C + +的多個文件你錯誤LNK2001 。一個辦法是包括常量初始化的一個頭文件,其中包括在您的頭。 cpp文件必要時,就好像它是一個函數原型。另一種辦法是使變數非恆定和使用時參考不斷評估它。
Ⅲ vc編譯時的警告會導致錯誤碼
Ambiguous operators need parentheses
不明確的運算需要用括弧括起
Ambiguous symbol ``xxx``
不明確的符號
Argument list syntax error
參數表語法錯誤
Array bounds missing
丟失數組界限符
Array size toolarge
數組尺寸太大
Bad character in paramenters
參數中有不適當的字元
Bad file name format in include directive
包含命令中文件名格式不正確
Bad ifdef directive synatax
編譯預處理ifdef有語法錯
Bad undef directive syntax
編譯預處理undef有語法錯
Bit field too large
位欄位太長
Call of non-function
調用未定義的函數
Call to function with no prototype
調用函數時沒有函數的說明
Cannot modify a const object
不允許修改常量對象
Case outside of switch
漏掉了case 語句
Case syntax error
Case 語法錯誤
Code has no effect
代碼不可述不可能執行到
Compound statement missing{
分程序漏掉"{"
Conflicting type modifiers
不明確的類型說明符
Constant expression required
要求常量表達式
Constant out of range in comparison
在比較中常量超出范圍
Conversion may lose significant digits
轉換時會丟失意義的數字
Conversion of near pointer not allowed
不允許轉換近指針
Could not find file ``xxx``
找不到XXX文件
Declaration missing ;
說明缺少";"
Declaration syntax error
說明中出現語法錯誤
Default outside of switch
Default 出現在switch語句之外
Define directive needs an identifier
定義編譯預處理需要標識符
Division by zero
用零作除數
Do statement must have while
Do-while語句中缺少while部分
Enum syntax error
枚舉類型語法錯誤
Enumeration constant syntax error
枚舉常數語法錯誤
Error directive :xxx
錯誤的編譯預處理命令
Error writing output file
寫輸出文件錯誤
Expression syntax error
表達式語法錯誤
Extra parameter in call
調用時出現多餘錯誤
File name too long
文件名太長
Function call missing )
函數調用缺少右括弧
Fuction definition out of place
函數定義位置錯誤
Fuction should return a value
函數必需返回一個值
Goto statement missing label
Goto語句沒有標號
Hexadecimal or octal constant too large
16進制或8進制常數太大
Illegal character ``x``
非法字元x
Illegal initialization
非法的初始化
Illegal octal digit
非法的8進制數字
Illegal pointer subtraction
非法的指針相減
Illegal structure operation
非法的結構體操作
Illegal use of floating point
非法的浮點運算
Illegal use of pointer
指針使用非法
Improper use of a typedefsymbol
類型定義符號使用不恰當
In-line assembly not allowed
不允許使用行間匯編
Incompatible storage class
存儲類別不相容
Incompatible type conversion
不相容的類型轉換
Incorrect number format
錯誤的數據格式
Incorrect use of default
Default使用不當
Invalid indirection
無效的間接運算
Invalid pointer addition
指針相加無效
Irrecible expression tree
無法執行的表達式運算
Lvalue required
需要邏輯值0或非0值
Macro argument syntax error
宏參數語法錯誤
Macro expansion too long
宏的擴展以後太長
Mismatched number of parameters in definition
定義中參數個數不匹配
Misplaced break
此處不應出現break語句
Misplaced continue
此處不應出現continue語句
Misplaced decimal point
此處不應出現小數點
Misplaced elif directive
不應編譯預處理elif
Misplaced else
此處不應出現else
Misplaced else directive
此處不應出現編譯預處理else
Misplaced endif directive
此處不應出現編譯預處理endif
Must be addressable
必須是可以編址的
Must take address of memory location
必須存儲定位的地址
No declaration for function ``xxx``
沒有函數xxx的說明
No stack
缺少堆棧
No type information
沒有類型信息
Non-portable pointer assignment
不可移動的指針(地址常數)賦值
Non-portable pointer comparison
不可移動的指針(地址常數)比較
Non-portable pointer conversion
不可移動的指針(地址常數)轉換
Not a valid expression format type
不合法的表達式格式
Not an allowed type
不允許使用的類型
Numeric constant too large
數值常太大
Out of memory
內存不夠用
Parameter ``xxx`` is never used
能數xxx沒有用到
Pointer required on left side of ->
符號->的左邊必須是指針
Possible use of ``xxx`` before definition
在定義之前就使用了xxx(警告)
Possibly incorrect assignment
賦值可能不正確
Redeclaration of ``xxx``
重復定義了xxx
Redefinition of ``xxx`` is not identical
xxx的兩次定義不一致
Register allocation failure
寄存器定址失敗
Repeat count needs an lvalue
重復計數需要邏輯值
Size of structure or array not known
結構體或數給大小不確定
Statement missing ;
語句後缺少";"
Structure or union syntax error
結構體或聯合體語法錯誤
Structure size too large
結構體尺寸太大
Sub scripting missing ]
下標缺少右方括弧
Superfluous & with function or array
函數或數組中有多餘的"&"
Suspicious pointer conversion
可疑的指針轉換
Symbol limit exceeded
符號超限
Too few parameters in call
函數調用時的實參少於函數的參數不
Too many default cases
Default太多(switch語句中一個)
Too many error or warning messages
錯誤或警告信息太多
Too many type in declaration
說明中類型太多
Too much auto memory in function
函數用到的局部存儲太多
Too much global data defined in file
文件中全局數據太多
Two consecutive dots
兩個連續的句點
Type mismatch in parameter xxx
參數xxx類型不匹配
Type mismatch in redeclaration of ``xxx``
xxx重定義的類型不匹配
Unable to create output file ``xxx``
無法建立輸出文件xxx
Unable to open include file ``xxx``
無法打開被包含的文件xxx
Unable to open input file ``xxx``
無法打開輸入文件xxx
Undefined label ``xxx``
沒有定義的標號xxx
Undefined structure ``xxx``
沒有定義的結構xxx
Undefined symbol ``xxx``
沒有定義的符號xxx
Unexpected end of file in comment started on line xxx
從xxx行開始的註解尚未結束文件不能結束
Unexpected end of file in conditional started on line xxx
從xxx 開始的條件語句尚未結束文件不能結束
Unknown assemble instruction
未知的匯編結構
Unknown option
未知的操作
Unknown preprocessor directive: ``xxx``
不認識的預處理命令xxx
Unreachable code
無路可達的代碼
Unterminated string or character constant
字元串缺少引號
User break
用戶強行中斷了程序
Void functions may not return a value
Void類型的函數不應有返回值
Wrong number of arguments
調用函數的參數數目錯
``xxx`` not an argument
xxx不是參數
``xxx`` not part of structure
xxx不是結構體的一部分
xxx statement missing (
xxx語句缺少左括弧
xxx statement missing )
xxx語句缺少右括弧
xxx statement missing ;
xxx缺少分號
xxx`` declared but never used
說明了xxx但沒有使用
xxx`` is assigned a value which is never used
給xxx賦了值但未用過
Zero length structure
結構體的長度為零
Ⅳ 程序編譯錯誤不知道是什麼原因
不能通編譯過的程序實際上還不是合法的程序,因為它不滿足C語言對於程序的基本要求。
檢查語法錯誤的第一要義:集中力量檢查系統發現的第一個錯誤,弄清並改正它。
在編譯過程中系統發現的錯誤主要有兩類:基本語法錯誤和上下文關系錯誤。這些錯誤都在表面上,可以直接看得見。也是比較容易弄清,比較容易解決的。關鍵是需要熟悉C語言的語法規定和有關上下文關系的規定,按照這些規定檢查程序正文,看看存在什麼問題。
編譯中系統發現錯誤都能指出錯誤的位置。不同系統在這方面的能力有差異,在錯誤定位的准確性方面有所不同。有的系統只能指明發現錯誤的行,有的系統還能夠指明行內位置。
一般說,系統指明的位置未必是真實錯誤出現的位置。通常情況是錯誤出現在前,而系統發現錯誤在後,因為它檢查到實際錯誤之後的某個地方,才能確認出了問題,因此報出錯誤信息。要確認第一個錯誤的原因,應該從系統指明的位置開始,在那裡檢查,並從那裡開始向前檢查。
系統的錯誤信息中都包含一段文字,說明它所認定的錯誤原因。應該仔細閱讀這段文字,通常它提供了有關錯誤的重要線索。但也應該理解,錯誤信息未必准確,有時錯誤確實存在,但系統對錯誤的解釋也可能不對。也就是說,在查找錯誤時,既要重視系統提供的錯誤信息,又不應為系統的錯誤信息所束縛。
發現了問題,要想清楚錯誤的真正原因,然後再修改。不要蠻干。在這時的最大誘惑就是想趕快改,看看錯誤會不會消失。但是蠻乾的結果常常是原來的錯誤沒有弄好,又搞出了新的錯誤。
另一個值得注意的地方:程序中的一個語法錯誤常常導致編譯系統產生許多錯誤信息。如果你改正了程序中一個或幾個錯誤,下面的弄不清楚了,那麼就應該重新編譯。改正一處常常能消去許多錯誤信息行。
解決語法錯誤
常見語法錯誤:
1)缺少語句、聲明、定義結束的分號。
2)某種括弧不配對。C語言中括弧性質的東西很多,列舉如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括弧不配對可能引起許多不同的錯誤信息。
3)關鍵字拼寫錯誤。
較難認定的典型錯誤:
1)宏定義造成的錯誤。這種東西不能在源程序文件中直接看到,是在宏替換之後出現的。常見的能引起語法錯誤的宏定義錯誤:宏定義中有不配對的括弧,宏定義最後加了不該有的分號,……
解決上下文關系錯誤
1)變數沒有定義。產生這個問題的原因除了變數確實沒有大意外,還可能是變數的拼寫錯誤,變數的作用域問題(在不能使用某個變數的地方想去用那個變數)。
2)變數重復定義。例如在同一個作用域里用同樣名字定義了兩個變數,函數的局部變數與參數重名等。
3)函數的重復定義。可能是用同一個名字定義了兩個不同的函數。或者是寫出的函數原型在類型上與該函數的定義不相符。有時沒有原型而直接寫函數調用也可能導致這種錯誤信息,因為編譯程序在遇到函數調用而沒有看到函數原型或函數定義時,將給函數假定一個默認原型。如果後來見到的函數定義與假定不符,就會報告函數重復定義錯誤。
4)變數類型與有關運算對運算對象或者函數對參數的要求不符。例如有些運算(如 %)要求整數參數,而你用的是某種浮點數。
5)有些類型之間不能互相轉換。例如你定義了一個結構變數,而後要用它給整數賦值。系統容許的轉換包括:數值類型之間的轉換,整數和指針之間的轉換,指針之間的轉換。其餘轉換(無論是隱含的,還是寫出強制)都不允許。參見《C語言程序設計》(K&R)197-199頁。
如何看待編譯警告
當編譯程序發現程序中某個地方有疑問,可能有問題時就會給出一個警告信息。警告信息可能意味著程序中隱含的大錯誤,也可能確實沒有問題。對於警告的正確處理方式應該是:盡可能地消除之。對於編譯程序給出的每個警告都應該仔細分析,看看是否真的有問題。只有那些確實無問題的警告才能放下不管。
注意:經驗表明,警告常常意味著嚴重的隱含錯誤。
常見警告:
1)(局部自動)變數沒有初始化就使用。如果對局部指針變數出現這種情況,後果不堪設想。對於一般局部自動變數,沒有初始化就使用它的值也不會是有意義的。
2)在條件語句或循環語句的條件中寫了賦值。大部分情況是誤將 == (等於判斷)寫成 = 了。這是很常見的程序錯誤,有些編譯程序對這種情況提出警告。
Ⅳ 西門子s7-200程序編譯成功 下載到plc 報警指示燈亮 是什麼原因
編譯成功了只能說明沒有語法,指令的錯誤。但是實際數據參數等不一定是對的,如果錯了,那麼下載到PLC中運行就會出錯並報警。在線監視一下,看看是哪個網路或者指令參數的錯誤,改正就好了。
望採納。。。。。。。
Ⅵ C語言編譯、連接的各種錯誤
編譯器錯誤 C2001 錯誤消息
常數中有換行符
字元串常數不能繼續到第二行,除非進行下列操作:
•用反斜杠結束第一行。
•用一個雙引號結束第一行上的字元串,並在下一行用另一個雙引號開始該字元串。
用 \n 結束第一行是不夠的。
編譯器錯誤 C2002 錯誤消息
無效的寬字元常數
多位元組字元常數是非法的。
通過檢查下面的可能原因進行修復
1.寬字元常數包含的位元組比需要的多。
2.未包括標准頭文件 STDDEF.h。
3.寬字元不能與一般字元串連接。
4.寬字元常數之前必須是字元「L」:
編譯器錯誤 C2003 錯誤消息
應輸入「defined id」
標識符必須跟在預處理器關鍵字之後。
編譯器錯誤 C2004 錯誤消息
應為「defined(id)」
標識符必須出現在預處理器關鍵字之後的括弧中。
也可能由於為 Visual Studio .NET 2003 進行的編譯器一致性工作生成此錯誤:在預處理器指
令中缺少括弧。
如果預處理器指令缺少右括弧,則編譯器將生成一個錯誤。
編譯器錯誤 C2005 錯誤消息
#line 應跟一個行號,卻找到「token」
#line 指令後面必須跟行號。
編譯器錯誤 C2006 錯誤消息
「directive」應輸入文件名,卻找到「token」
諸如 #include 或 #import 等指令需要文件名。若要解決該錯誤,請確保 token 是一個有效
文件名。並且將該文件名放在雙引號或尖括弧中。
編譯器錯誤 C2007 錯誤消息
#define 語法
#define 後未出現標識符。若要解決該錯誤,請使用標識符。
編譯器錯誤 C2008 錯誤消息
「character」: 宏定義中的意外
該字元緊跟在宏名之後。若要解決該錯誤,宏名之後必須有一個空格。
編譯器錯誤 C2009 錯誤消息
宏形式「identifier」重復使用
宏定義的形參表多次使用該標識符。宏的參數列表中的標識符必須是唯一的。
編譯器錯誤 C2010 錯誤消息
「character」: 宏形參表中的意外
該字元在宏定義的形參表中使用不正確。移除該字元以解決該錯誤。
編譯器錯誤 C2011 錯誤消息
「identifier」:「type」類型重定義
該標識符已定義為 type 類型。如果多次將某個類型庫導入同一個文件,也可能生成 C2011
。
編譯器錯誤 C2012 錯誤消息
在「<」之後缺少名稱
#include 指令缺少所需的文件名。
編譯器錯誤 C2013 錯誤消息
缺少「>」
#include 指令缺少右尖括弧。添加右尖括弧以解決該錯誤。
編譯器錯誤 C2014 錯誤消息
預處理器命令必須作為第一個非空白空間啟動
預處理器指令的 # 符號必須是非空白行上的第一個字元。
編譯器錯誤 C2015 錯誤消息
常數中的字元太多
一個字元常數包含的字元多於兩個。標准字元常數只能包含一個字元,長字元常數只能包含兩
個字元。
轉義序列(如 \t)將被轉換為單個字元。
當使用 Microsoft 擴展將字元常數轉換為整數時,也可能發生 C2015。
編譯器錯誤 C2017 錯誤消息
非法的轉義序列
轉義序列(如 \t)出現在字元或字元串常數之外。
當 stringize 運算符與包括轉義序列的字元串一起使用時會發生 C2017。
編譯器錯誤 C2018 錯誤消息
未知字元「hexnumber」
源文件包含一個意外的 ASCII 字元,該字元由其十六進制數標識。若要解決該錯誤,請移除
該字元。
編譯器錯誤 C2019 錯誤消息
應找到預處理器指令,卻找到「character」
該字元跟在 # 符號的後面,但它不是預處理器指令的第一個字母。
編譯器錯誤 C2020 錯誤消息
「member」:「class」成員重定義
從基類或結構繼承的成員被重定義。不能重定義繼承成員,除非它在基類中被聲明為 virtual
。
編譯器錯誤 C2021 錯誤消息
應輸入指數值,而非「character」
用作浮點常數的指數的字元是一個無效數字。確保使用的指數在范圍之內。
編譯器錯誤 C2022 錯誤消息
「number」: 對字元來說太大
字元或字元串常數中跟在反斜杠 (\) 後面的八進制數字太大,不能表示字元。
編譯器錯誤 C2026 錯誤消息
字元串太大,已截斷尾部字元
該字元串的長度超過了 16380 個單位元組字元的**。
連接相鄰字元串之前,字元串的長度不能超過 16380 個單位元組字元。
大約為此長度的一半的 Unicode 字元串也會生成此錯誤。
編譯器錯誤 C2027 錯誤消息
使用了未定義類型「type」
類型只有經過定義才能使用。若要解決該錯誤,請確保在引用類型前已對其進行了完全定義。
有可能聲明一個指向已聲明但未定義的類型的指針。但是 Visual C++ 不允許引用未定義的類
型。
編譯器錯誤 C2028 錯誤消息
結構/聯合成員必須在結構/聯合中
結構或聯合成員必須在結構或聯合內部聲明。
編譯器錯誤 C2030 錯誤消息
「identifier」: 結構/聯合成員重定義
結構或聯合將同一標識符用於多個成員。
編譯器錯誤 C2032 錯誤消息
「identifier」: 函數不能是結構/聯合「structorunion」的成員
該結構或聯合中的一個成員函數在 C++ 中允許使用而在 C 中卻不允許。若要解決該錯誤,請
編譯為 C++ 程序或移除該成員函數。
編譯器錯誤 C2033 錯誤消息
「identifier」: 位域不能有間接定址
該位域被聲明為指針,這是不允許的。
編譯器錯誤 C2034 錯誤消息
「identifier」: 位域類型對於位數太小
該位域聲明中位的數目超過了基類型的大小。
編譯器錯誤 C2036 錯誤消息
「identifier」: 未知的大小
對 identifier 的操作需要數據對象的大小,而該大小無法確定。
編譯器錯誤 C2039 錯誤消息
「identifier1」: 不是「identifier2」的成員
該代碼錯誤調用或引用了結構、類或聯合的成員。
編譯器錯誤 C2040 錯誤消息
「operator」:「identifier1」與「identifier2」的間接定址級別不同
涉及該運算符的表達式具有不一致的間接定址級別。
如果兩個操作數都是算術的或都是非算術的(如數組或指針),則不用更改就可使用它們。如
果一個操作數是算術的,而另一個不是,則算術運算符將轉換為非算術類型。
編譯器錯誤 C2041 錯誤消息
非法的數字「character」(用於基「number」)
指定的字元不是基(如八進制或十六進制)的有效數字。
編譯器錯誤 C2042 錯誤消息
signed/unsigned 關鍵字互相排斥
在單個聲明中使用關鍵字 signed 和 unsigned。
編譯器錯誤 C2043 錯誤消息
非法 break
break 僅在 do、for、while 或 switch 語句中合法。
編譯器錯誤 C2044 錯誤消息
非法 continue
continue 僅在 do、for 或 while 語句中合法。
編譯器錯誤 C2045 錯誤消息
「identifier」: 標簽重定義
該標簽出現在同一函數中的多條語句之前。
編譯器錯誤 C2046 錯誤消息
非法的 case
關鍵字 case 只能出現在 switch 語句中。
編譯器錯誤 C2047 錯誤消息
非法的 default
關鍵字 default 僅能出現在 switch 語句中。
編譯器錯誤 C2048 錯誤消息
默認值多於一個
switch 語句包含多個 default 標簽。刪除其中一個 default 標簽可解決該錯誤。
編譯器錯誤 C2050 錯誤消息
switch 表達式不是整型
switch 表達式計算結果為一個非整數值。若要解決該錯誤,請在 switch 語句中只使用整數
值。
編譯器錯誤 C2051 錯誤消息
case 表達式不是常數
Case 表達式必須是整數常數。
編譯器錯誤 C2052 錯誤消息
「type」: 非法的 case 表達式類型
Case 表達式必須是整數常數。
編譯器錯誤 C2053 錯誤消息
「identifier」: 寬字元串不匹配
寬字元串被分配給了一個不兼容的類型。
編譯器錯誤 C2054 錯誤消息
在「identifier」之後應輸入「(」
該函數標識符用在需要尾部括弧的上下文中。
導致該錯誤的可能原因是省略了復雜初始化上的等號 (=)。
編譯器錯誤 C2055 錯誤消息
應輸入形參表,而不是類型表
函數定義包含參數類型列表而不包含形參表。ANSI C 需要命名的形參,除非它們是 void 或
是省略號 (...)。
編譯器錯誤 C2056 錯誤消息
非法表達式
表達式因前一個錯誤而無效。
編譯器錯誤 C2057 錯誤消息
應輸入常數表達式
上下文要求常數表達式,即其值在編譯時已知的表達式。
編譯器錯誤 C2058 錯誤消息
常數表達式不是整型
該上下文需要整數常數表達式。
編譯器錯誤 C2059 錯誤消息
語法錯誤 :「token」
該標記導致語法錯誤。
若要確定原因,則不僅要檢查在錯誤信息中列出的行,還要檢查該行上面的行。下面的示例對
聲明 j 的行生成了錯誤信息,而該錯誤的真正源卻出現在其上面的行中。
如果對行的檢查沒有獲得有關可能出現的問題的任何線索,則嘗試注釋掉在錯誤信息中列出的
行以及可能出現在該行上面的若干行。
如果該錯誤信息在緊跟 typedef 變數的符號上出現,則檢查該變數是否已在源代碼中定義。
如果符號沒有計算出任何結果(在使用 /Dsymbol= 編譯時可能發生),可能會導致 C2059。
可能收到 C2059 的另一個特定原因是編譯在函數的默認參數中指定了結構的應用程序。參數的
默認值必須是一個表達式。初始值設定項列表(如用於初始化結構的初始值設定項列表)不是表達式。其解決方法是定義一
個執行所需初始化的構造函數。
編譯器錯誤 C2060 錯誤消息
語法錯誤 : 遇到文件結束
至少還需要一個標記。
編譯器錯誤 C2061 錯誤消息
語法錯誤: 標識符「identifier」
編譯器發現了不應在此出現的標識符。請確保在使用 identifier 之前對其進行聲明。
初始值設定項可能括在了括弧中。為避免該問題,請將聲明符括在括弧中或使其成為 typedef
。
在編譯器將表達式作為類模板參數檢測時也可能導致此錯誤;使用 typename 告訴編譯器它是
一個類型。
編譯器錯誤 C2062 錯誤消息
意外的類型「type」
編譯器不需要類型名稱。
編譯器處理構造函數的參數列表中未定義類型的方式也可能導致 C2062。如果編譯器遇到未定
義的(拼錯了嗎?)類型,則它假定構造函數是一個表達式,並發出 C2062。若要解決此錯誤,請只使用構造函數參數列表
中的定義類型。
編譯器錯誤 C2063 錯誤消息
「identifier」: 不是函數
該標識符用作函數,但未聲明為函數。
編譯器錯誤 C2064 錯誤消息
項不會計算為接受「number」個參數的函數
通過表達式調用了函數。該表達式未計算為函數指針。
編譯器錯誤 C2065 錯誤消息
「identifier」: 未聲明的標識符
在可使用變數的類型前必須在聲明中指定它。在可以使用函數前必須在聲明或原型中指定該函
數使用的參數。
可能的原因:
1.您正在用 C 運行庫的調試版本進行編譯,在 for 循環中聲明標准 C++ 庫迭代器變數,然後
嘗試在 for 循環范圍外使用該迭代器變數。 用 C 運行庫的調試版本編譯標准 C++ 庫代碼暗指使用 /Zc:forScope。有關更
多信息,請參見調試迭代器支持。
2.可能正在調用當前不受生成環境支持的 SDK 頭文件中的函數。
3.省略必要的包含文件,尤其是在定義 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或
WIN32_EXTRA_LEAN 時。這些符號從 windows.h 和 afxv_w32.h 中排除了一些頭文件以加快編譯。(在 windows.h 和
afxv_w32.h 中查找排除的頭文件的最新說明。)
4.標識符名拼寫錯誤。
5.標識符使用了錯誤的大小寫字母。
6.字元串常數的後面缺少右引號。
7.命名空間范圍不正確。例如,若要解析 ANSI C++ 標准庫函數和運算符,則必須用 using 指
令指定 std 命名空間。下面的示例未能編譯,因為 using 指令被注釋掉,並且在 std 命名空間中定義了 cout:
編譯器錯誤 C2066 錯誤消息
轉換到函數類型是非法的
在 ANSI C 中,函數指針和數據指針間的轉換是非法的。
編譯器錯誤 C2067 錯誤消息
轉換到數組類型是非法的
對象被轉換成了數組類型。
編譯器錯誤 C2069 錯誤消息
「void」項到非「void」項的強制轉換
類型 void 不能轉換成任何其他類型。
編譯器錯誤 C2070 錯誤消息
「type」: 非法的 sizeof 操作數
sizeof 運算符需要一個表達式或類型名稱。
編譯器錯誤 C2071 錯誤消息
「identifier」: 非法的存儲類
聲明 identifier 所用的存儲類無效。
編譯器錯誤 C2072 錯誤消息
「identifier」: 函數的初始化
錯誤指定了函數初始值設定項。
編譯器錯誤 C2073 錯誤消息
「identifier」: 部分初始化數組的元素必須有默認構造函數
為用戶定義的類型或常數的數組指定的初始值設定項太少。如果沒有為數組成員指定明確的初
始值設定項及其對應的構造函數,則必須提供默認的構造函數。
編譯器錯誤 C2074 錯誤消息
「identifier」:「class-key」初始化需要大括弧
在指定的類、結構或聯合初始值設定項兩邊沒有大括弧。
編譯器錯誤 C2075 錯誤消息
「identifier」: 數組初始化需要大括弧
在指定的數組初始值設定項兩邊沒有大括弧。
編譯器錯誤 C2077 錯誤消息
非標量欄位初始值設定項「identifier」
試圖用非標量(結構、聯合、數組或類)初始化位域。使用整數值或浮點值。
編譯器錯誤 C2078 錯誤消息
初始值設定項太多
初始值設定項的數目超過了要初始化的對象數。
編譯器錯誤 C2079 錯誤消息
「identifier」使用未定義的類/結構/聯合「name」
指定的標識符是一個未定義的類、結構或聯合。
初始化匿名聯合時,可能會導致此錯誤。
編譯器錯誤 C2081 錯誤消息
「identifier」: 形參表中的名稱非法
標識符導致語法錯誤。
此錯誤可能是由使用形參表的舊形式導致的。必須在形參表中指定形參的類型。
編譯器錯誤 C2082 錯誤消息
形參「identifier」的重定義
在函數體中重新聲明了函數的形參。若要解決該錯誤,請移除該重定義。
編譯器錯誤 C2083 錯誤消息
結構/聯合比較非法
結構或聯合直接與另一個用戶定義的類型進行比較。這是不允許的,除非已經定義了比較運算
符或者存在到標量類型的轉換。
編譯器錯誤 C2084 錯誤消息
函數「function」已有主體
函數已經定義。
在以前的 Visual C++ 版本中,
•編譯器將接受解析為同一實際類型的多個模板的專用化,盡管附加的定義將永遠不可用。現
在編譯器將檢測這些多重定義。
•__int32 和 int 已被視為單獨的類型。編譯器現在將 __int32 作為 int 的同義詞處理。這
意味著,如果函數同時在 __int32 和 int 上重載,編譯器將檢測多個定義,並提供一個錯誤。
編譯器錯誤 C2085 錯誤消息
「identifier」: 不在形參表中
該標識符在函數定義中聲明而未在形參表中聲明。(僅用於 ANSI C)
編譯器錯誤 C2086 錯誤消息
「identifier」: 重定義
多次定義了該標識符,或者後面的聲明與前一個不同。
C2086 也可能是增量編譯引用的 C# 程序集的結果。重新生成該 C# 程序集以解決此錯誤。
編譯器錯誤 C2087 錯誤消息
「identifier」: 缺少下標
具有多個下標的數組的定義缺少大於 1 的維度的下標值。
編譯器錯誤 C2088 錯誤消息
「operator」: 對於「class-key」非法
沒有為結構或聯合定義該運算符。該錯誤只對 C 代碼有效。
編譯器錯誤 C2089 錯誤消息
「identifier」:「class-key」太大
指定的結構或聯合超過 4GB 的**。
編譯器錯誤 C2090 錯誤消息
函數返回數組
函數不能返回數組。請返回指向數組的指針。
編譯器錯誤 C2091 錯誤消息
函數返回函數
函數不能返回函數。請返回指向函數的指針。
編譯器錯誤 C2092 錯誤消息
「array name」數組元素類型不能是函數
不允許使用函數數組。請使用指向函數的指針的數組。
編譯器錯誤 C2093 錯誤消息
「variable1」: 無法使用自動變數「variable2」的地址初始化
在用 /Za 編譯時,程序試圖將自動變數的地址用作初始值設定項。
編譯器錯誤 C2094 錯誤消息
標簽「identifier」未定義
goto 語句使用的標簽在函數中不存在。
編譯器錯誤 C2095 錯誤消息
「function」: 實參具有類型「void」:「number」參數
傳遞給函數的參數為 void 類型,這是不允許的。請改為使用指向 void 的指針 (void *)。
number 指示哪一個參數為 void。
編譯器錯誤 C2097 錯誤消息
非法的初始化
通過檢查下面的可能原因進行修復
1.使用非常數值初始化變數。
2.用長地址初始化短地址。
3.在用 /Za 編譯時,用非常數表達式初始化局部結構、聯合或數組。
4.用包含逗號運算符的表達式初始化。
5.用既非常數又非符號的表達式初始化。
編譯器錯誤 C2099 錯誤消息
初始值設定項不是常數
此錯誤只由 C 編譯器發出,而且只對非自動變數發生。編譯器在程序的開頭對非自動變數進
行初始化,並且用於對這些變數進行初始化的值必須是常數。
由於編譯時與運行時的浮點精度環境設置(有關更多信息,請參見 _controlfp_s)可能不同
,因此,編譯器無法在 /fp:strict 下對表達式執行常數合並。在這種情況下,也可能發生 C2099。
當常數合並失敗時,編譯器調用動態初始化,這在 C 中是不允許的。
要解決此錯誤,請將模塊編譯為 .cpp 文件或對表達式進行簡化。
Ⅶ c++中什麼是語法錯誤,什麼是編譯錯誤
程序的錯誤主要分成三種:
編譯鏈接錯誤;
編譯鏈接錯誤又分成編譯錯和鏈接錯。
編譯錯就是普通意義上的語法錯,編譯器進行語法檢查不通過,也就是程序違背了計算機語言的語法,例如:括弧不匹配、變數名拼寫錯誤、用保留字定義變數名等;
鏈接錯是指程序通過了語法檢查,但是無法生成可執行文件,最常見的是鏈接找不到lib庫。初學者有時寫了函數的聲明,但是缺少函數的定義,此時就會出現鏈接錯。
運行錯誤;
運行錯是程序可以執行,但是在執行過程中發生異常,提前退出程序。最常見的是指針越界,打開文件失敗繼續讀取文件,總而言之是讓計算機執行一些不能執行的語句。
邏輯錯誤
邏輯錯是程序也能運行,就是結果不對,主要原因有:程序演算法本身錯誤,程序和演算法不同義等。
例如:新手經常將判斷相等的==寫成=賦值,往往就會導致邏輯錯。
你的BD(int,int); 是一句函數調用?還是一句函數聲明?
Ⅷ 怎樣消除編譯器關於 C++11 的警告
1. 預處理首先源代碼文件(.c/.cpp)和相關頭文件(.h/.hpp)被預處理器cpp預編譯成.i文件(C++為.ii)。預處理命令為:gcc –E hello.c –o hello.i預編譯過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則如下:u 將所有的#define刪除,並且展開所有的宏定義;u 處理所有條件編譯指令,如#if,#ifdef等;u 處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。該過程遞歸進行,及被包含的文件可能還包含其他文件。u 刪除所有的注釋//和 /**/;u 添加行號和文件標識,如#2 「hello.c」 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時能夠顯示行號信息;u 保留所有的#pragma編譯器指令,因為編譯器須要使用它們。2. 編譯編譯過程就是把預處理完的文件進行一系列詞法分析,語法分析,語義分析及優化後生成相應的匯編代碼文件(.s)。編譯的命令為:gcc –S hello.i –o hello.s或者從源文件直接輸出匯編代碼文件:gcc –S hello.c –o hello.s現在版本的GCC把預編譯和編譯兩個步驟合並成一個步驟,由程序cc1來完成(C++為cc1plus)。3. 匯編匯編就是將匯編代碼轉變成機器可以執行的命令,生成目標文件(.o),匯編器as根據匯編指令和機器指令的對照表一一翻譯即可完成。匯編的命令為:gcc –c hello.s –o hello.o或者從源文件直接輸出目標文件:gcc –c hello.c –o hello.o4. 鏈接鏈接就是鏈接器ld將各個目標文件組裝在一起,解決符號依賴,庫依賴關系,並生成可執行文件。鏈接的命令為:ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o一般我們使用一條命令就可以完成上述4個步驟:gcc hello.c實際上gcc只是一些其它程序的包裝,它會根據不同參數去調用預編譯編譯程序cc1、匯編器as、鏈接器ld。
Ⅸ iOS 編譯報錯怎麼辦
1.編譯iPad真機時,選擇了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.
若編譯出現如下錯誤:
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
則修改 GCC4.2CodeGeneral區域中的ComplieForThumb為非選中.
已經有了開發者證書及私鑰後,可直接在越獄的手機上調試.
2. 編譯鏈接時, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某個類的文件.
或者:選擇項目名,在detail列表中的target列(顯示為一個又圓圈),把這個文件的復選選中,或者再次選中.以把它加入到這個target裡面來.
3.在sdk4.0及以上使用RegexKitLite報'captureCount' was not declared in this scope錯誤,是在非.m文件中使用了它的原因.
4.there is no sdk with the name or path.
從網上down的開源代碼,結果運行的時候常出現這樣的錯,並且在deployment中沒有iosdeploymenttarget選項.
嘗試 Project/Edit Active Target/ 及 Set Active SDK菜單項,來回切換一下Active Configuration。
5. EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION錯誤,意味著這個app有內存管理的問題,一般是因為訪問野指針對象造成的。
一個和內存相關的崩潰一般很難定位到源代碼,因為這個惡魔可能很早就在程序中做了壞事了。假如一段有問題的代碼混亂了內存結構,這樣產生的蝴蝶效應可能會在之後很久才表現出來,並且總在不同的地方。所以,若有指針類型出現了不可能的變化,很可能就是因為內存結構被野指針調用混亂了。
修復一些警告後,可能就能預防一些內存錯誤。警告在左邊靠近行號的黃色三角指出一個編譯警告,你點擊那個黃色的三角形,xcode可能會彈出一個「Fix-it」的建議。
EXC_BAD_ACCESS崩潰不像SIGABRT,將不會得到很明朗的錯誤消息。然而可以使用一個讓人看到曙光的調試工具:Zombies!死亡對象工具。打開這個項目的scheme editor,選擇Run 選項,然後選擇Diagnosics標簽。勾上Enable Zombie Objects選項。當這個zombie工具被啟用之後,即使這個對象被釋放了,這個對象的內存也不會被清理。所以,那塊內存將會被標記為「長生不死的」。假如你試著之後又去使用這塊內存,這個app能夠意識到你的錯誤操作,並且app將會拋出「messagesent to daellocated instance」錯誤並且終止運行。
在工程中加入NSZombieEnabled 環境變數,並設為啟用,則在 EXC_BAD_ACCESS 發生時,XCode 的 Console 會列印出問題描述中,設置方法:雙擊Executables 下的 可執行模組,在彈出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,並設定為 YES,點擊選中復選框啟用此變數。
可以再加入 MallocStackLogging 來啟用malloc記錄,以獲得更多的提示來幫助定位問題。
在gdb窗口輸入 (格式: shell malloc_history <id> <address>) shellmalloc_history1436 0x5f7fcf0, 也可以在終端中去運行 就要去掉以上的shell 指令 如 malloc_history <id> <address>
應該僅當需要調試內存時,才設置上述環境變數。
注意一點:不應該一直啟用zombie objects。因為這個工具將永遠不會釋放內存,只是簡單標記一下這個內存是不死的,你最終將會在某個時候耗盡所有的內存,因為所有分配過的內存都不會得到重用。因此應該在排查內存相關的錯誤的時候才開啟zombie objects,其他時候應該關閉它。
在xcode4中,To edit environment variables, go to Menu Proct / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.
6.運行一個IPhone程序時,彈出窗口說「程序運行失敗,預置描述文件已過期」 。 解決辦法是,在Xcode中, window-> Orgnazier -> 你的iphone ->刪除帶有紅*的該程序之前的Profile 。 然後從Xcode運行該程序.
7.真機編譯時報 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain
修改工程和Targets的get infouild 中的code signing identity為空
8.調試列印
CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}
If NSLog() is printing something out as an NSCFType, try CFShow().
9. 編譯時報 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version為gcc4.2
10.this class is not key value coding-compliant for the key viewController
可能在創建了一個基於view的工程,而後把生成的viewcontroller刪除了,但是在.xib中還有對它的引用,在IB中直接用delete鍵刪除掉它就行了。
11.這台電腦上已經存在一個名為「embedded.mobileprovision」的預置文件,您是否要替換么?
http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html
12.真機調試時報failed to upload *.app
http://hi..com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html
http://www.shouyanwang.org/thread-462-1-1.html
13.記的release時,先置delegate為nil。
一個節點不應該保留任何對不屬於它的節點的引用。
14.模擬器
將xcode升級到4.3.1以後發現,ipad的模擬器,沒有Home鍵了。Command+Shift+H就可以實現類似點擊Home鍵的效果了。