程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> VC6.0罕見編譯毛病提醒附處理辦法

VC6.0罕見編譯毛病提醒附處理辦法

編輯:關於C++

VC6.0罕見編譯毛病提醒附處理辦法。本站提示廣大學習愛好者:(VC6.0罕見編譯毛病提醒附處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是VC6.0罕見編譯毛病提醒附處理辦法正文


(1)error C2001: newline in constant

編號:C2001
直譯:在常量中湧現了換行。
毛病剖析:
1.①字符串常量、字符常量中能否有換行。
2.②在這句語句中,某個字符串常量的尾部能否漏失落了雙引號。
3.③在這語句中,某個字符創常量中能否湧現了雙引號字符“"”,然則沒有應用本義符“\"”。
4.④在這句語句中,某個字符常量的尾部能否漏失落了單引號。
5.⑤能否在某句語句的尾部,或語句的中央誤輸出了一個單引號或雙引號。

(2)error C2015: too many characters in constant

編號:C2015
直譯:字符常量中的字符太多了。
毛病剖析:
單引號表現字符型常量。普通的,單引號中必需有且只能有一個字符(應用本義符時,本義符所表現的字符看成一個字符對待),假如單引號中的字符數多於4個,就會激發這個毛病。
別的,假如語句中某個字符常量缺乏左邊的單引號,也會激發這個毛病,例如:
if (x == 'x || x == 'y') { … }
值得留意的是,假如單引號中的字符數是2-4個,編譯不報錯,輸入成果是這幾個字母的ASC碼作為一個整數(int,4B)全體對待的數字。

(3)error C2137: empty character constant

編號:C2137
直譯:空的字符界說。
毛病剖析:
緣由是連用了兩個單引號,而中央沒有任何字符,這是不許可的。

(4)error C2018: unknown character '0x##'

編號:C2018
直譯:未知字符‘0x##'。
毛病剖析:
0x##是字符ASC碼的16進制表現法。這裡說的未知字符,平日是指全角符號、字母、數字,或許直接輸出了漢字。假如全角字符和漢字用雙引號包括起來,則成為字符串常量的一部門,是不會激發這個毛病的。

(5)error C2041: illegal digit '#' for base '8'

編號:C2141
直譯:在八進制中湧現了不法的數字‘#'(這個數字#平日是8或許9)。
毛病剖析:
假如某個數字常量以“0”開首(純真的數字0除外),那末編譯器會以為這是一個8進制數字。例如:“089”、“078”、“093”都長短法的,而“071”是正當的,同等因而進制中的“57”。

(6)error C2065: 'xxxx' : undeclared identifier

編號:C2065
直譯:標識符“xxxx”不決義。
毛病剖析:
起首,說明一下甚麼是標識符。標記符是法式中湧現的除症結字以外的詞,平日由字母、數字和下劃線構成,不克不及以數字開首,不克不及與症結字反復,而且辨別年夜小寫。變量名、函數名、類名、常量名等等,都是標記符。一切的標記符都必需先界說,後應用。標記符有許多種用處,所以毛病也有許多種緣由。

1.假如“xxxx”是一個變量名,那末平日是法式員忘卻了界說這個變量,或許拼寫毛病、年夜小寫毛病所惹起的,所以,起首檢討變量名能否准確。(聯系關系:變量,變量界說)
2.假如“xxxx”是一個函數名,那就疑惑函數名能否沒有界說。能夠是拼寫毛病或年夜小寫毛病,固然,也有能夠是你所挪用的函數基本不存在。還有一種能夠,你寫的函數在你挪用地點的函數以後,而你有無在挪用之前對函數本相停止聲名。(聯系關系:函數聲名與界說,函數原型)
3.假如“xxxx”是一個庫函數的函數名,好比“sqrt”、“fabs”,那末看看你在cpp文件已開端能否包括了這些庫函數地點的頭文件(.h文件)。例如,應用“sqrt”函數須要頭文件math.h。假如“xxxx”就是“cin”或“cout”,那末普通是沒有包括“iostream.h”。(聯系關系:#include,cin,cout)
4.假如“xxxx”是一個類名,那末表現這個類沒有界說,能夠性仍然是:基本沒有界說這個類,或許拼寫毛病,或許年夜小寫毛病,或許缺乏頭文件,或許類的應用在聲名之前。(聯系關系:類,類界說)
5.標記符遵守先聲名後應用准繩。所以,不管是變量、函數名、類名,都必需先界說,後應用。如應用在前,聲名在後,就會激發這個毛病。
6.C++的感化域也會成為激發這個毛病的圈套。在花括號以內變量,是不克不及在這個花括號以外應用的。類、函數、if、do(while)、for所惹起的花括號都遵守這個規矩。(聯系關系:感化域)
7.後面某句語句的毛病也能夠招致編譯器誤以為這一句有錯。假如你後面的變量界說語句有毛病,編譯器在前面的編譯中會以為該變量歷來沒有界說過,乃至前面一切應用這個變量的語句都報這個毛病。假如函數聲名語句有毛病,那末將會激發異樣的成績。

(7)error C2086: 'xxxx' : redefinition

編號:C2374
直譯:“xxxx”反復聲名。
毛病剖析:
變量“xxxx”在統一感化域中界說了屢次。檢討“xxxx”的每次界說,只保存一個,或許更轉變量名。

(8)error C2374: 'xxxx' : redefinition; multiple initialization

編號:C2374
直譯:“xxxx”反復聲名,屢次初始化。
毛病剖析:
變量“xxxx”在統一感化域中界說了屢次,而且停止了屢次初始化。檢討“xxxx”的每次界說,只保存一個,或許更轉變量名。

(9)C2143: syntax error : missing ';' before (identifier) 'xxxx'

編號:C2143
直譯:在(標記符)“xxxx”前缺乏分號。
毛病剖析:
這是VC6的編譯期最多見的誤報,當湧現這個毛病時,常常所指的語句並沒有毛病,而是它的上一句語句產生了毛病。其實,更適合的做法是編譯器申報在上一句語句的尾部缺乏分號。上一句語句的許多種毛病都邑招致編譯器報出這個毛病:

1.上一句語句的末尾真的缺乏分號。那末補上便可以了。
2.上一句語句不完全,或許有顯著的語法毛病,或許基本不克不及算上一句語句(有時刻是有意中按到鍵盤而至)。
3.假如發明產生毛病的語句是cpp文件的第一行語句,在本文件中檢討沒有毛病,但其應用雙引號包括了某個頭文件,那末檢討這個頭文件,在這個頭文件的尾部能夠有毛病。

(10)error C4716: 'xxx' : must return a value

編號:C4716
直譯:“xxx”必需前往一個值。
毛病剖析:
函數聲清楚明了有前往值(不為void),但函數完成中忘卻了return 前往值。要末函數確切沒有前往值,則修正其前往值類型為void,要末在函數停止前前往適合的值。

(11) warning C4508: 'main' : function should return a value; 'void' return type assumed

編號:C4508
直譯:main函數應當前往一個值;void前往值類型被假定。
毛病剖析:

1.函數應當有前往值,聲明函數時應指明前往值的類型,確切無前往值的,應將函數前往值聲明為void。若未聲明函數前往值的類型,則體系默許為整型int。此處的毛病估量是在main函數中沒有return前往值語句,而main函數要末沒有聲明其前往值的類型,要末聲清楚明了。
2.warning類型的毛病為正告性質的毛病,其意思是其實不必定有錯,法式仍可以被勝利編譯、鏈接,但能夠有成績、有風險。

(12)warning C4700: local variable 'xxx' used without having been initialized

編號:C4700
直譯:正告部分變量“xxx”在應用前沒有被初始化。
毛病剖析:
這是初學者罕見的毛病,例如以下法式段就會形成如許的正告,並且法式切實其實有成績,應加以修正,雖然編譯、鏈接可以勝利——若不修正,x的值究竟是若干沒法肯定,是隨機的,斷定其能否與3雷同沒成心義,在命運運限欠好的情形下,能夠在調試法式的機械上運轉時,成果看起來是對的,但改換盤算機後再運轉,成果就纰謬,初學者常常覺得困惑。
int x;
if (x==3) printf("hello");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved