編譯來源時出錯
A. 編譯錯誤,如何解決error LNK2001: unresolved external symbol
導致「error LNK2001: unresolved external symbol」的原因為getStats此方法的鏈接庫沒有找到。很可能是工程中引用了第三方開源庫或者自己編譯生成的庫,且只用了頭文件,而沒有將對應的lib文件路徑加入到工程中。
具體解決方法為(此方法針對vs系列集成開發環境):
1.如果還未引入頭文件,那麼可以右鍵點擊項目,然後點擊「屬性」。
B. visual c++ 6.0編譯時總有一個錯誤是怎麼回事
實際上這個問題很多情況下是由於路徑設置的問題引起的, 「CL.exe」是VC使用真正的編譯器(編譯程序),其路徑在「VC根目錄VC98Bin」下面, 你可以到相應的路徑下找到這個應用程序。
因此問題可以按照以下方法解決:
方法一:
打開vc界面 點擊VC「TOOLS(工具)」—>「Option(選擇)」 —>「Directories(目錄)」重新設置「Excutable Fils、Include Files、 Library Files、Source Files」的路徑。很多情況可能就一個盤符的不同 (例如你的VC裝在C,但是這些路徑全部在D),改過來就OK了。
如果你是按照初始路徑安裝vc6.0的,路徑應為: executatble files: C:Program FilesMicrosoft Visual StudioCommonMSDev98Bin C:Program FilesMicrosoft Visual StudioVC98BIN C:Program FilesMicrosoft Visual StudioCommonTOOLS C:Program FilesMicrosoft Visual StudioCommonTOOLSWINNT
include files: C:Program FilesMicrosoft Visual StudioVC98INCLUDE C:Program FilesMicrosoft Visual StudioVC98MFCINCLUDE C:Program FilesMicrosoft Visual StudioVC98ATLINCLUDE
library files: C:Program FilesMicrosoft Visual StudioVC98LIB C:Program FilesMicrosoft Visual StudioVC98MFCLIB
source files: C:Program FilesMicrosoft Visual StudioVC98MFCSRC C:Program FilesMicrosoft Visual StudioVC98MFCINCLUDE C:Program FilesMicrosoft Visual StudioVC98ATLINCLUDE C:Program FilesMicrosoft Visual StudioVC98CRTSRC
如果你裝在其他盤里,則仿照其路徑變通就行(我就是裝在D[來源:GameRes.com]盤)。 關鍵是microsoft visual studio 後面的東西要相同。 主義大小寫。
方法二:(這種較簡單)
最簡便的方法: 啟動VC時不要用圖形界面,通過在命令提示符下輸入:Msdev /useenv運行(注意啦/前面有個空格).它會強制使系統環境變數全高設置成正確值.而且,只需要使用一次這樣的方式運行VC,以後再次通過雙擊圖標的方式啟動也不會有問題.
第3種方法就是設置了一下路徑:D:Program FilesMicrosoft Visual Studio 8VCin(因為我裝的是2005,所以。。。)
追問:
都試過了,不行。。。
追答:
執行VC98BIN下的VCVARS32.BAT,設置環境變數
還不行的話 直接下載這個
http://www.xdowns.com/soft/38/121/2008/Soft_44195.html
C. 編譯C++的源碼時遇到問題:error:『B』does not name a type.
XXX應該是一種用戶定義的數據類型,而由於沒有聲明或者拼寫錯誤或者與關鍵詞重名,導致編譯有錯,出現類型錯誤。
在一個源文件中,要聲明或定義一個類的指針時,必須在使用前聲明或定義該類,因此下面的代碼會報錯:class A{public: B *b;};class B{public: A *a;};int main(){ return 0;}12345678910111213141516
報錯為「error: 『B』 does not name a type」,就是因為在A類中使用B *b之前沒有聲明或定義B類,如果在第一行加上一句前置聲明(forward declaration)「class B;」,就不會有這樣的問題了。
而在頭文件互相包含時,也會引發「error: 『xxx』 does not name a type」,其報錯原因和上面的代碼是相同的,請看下面的代碼:a.h:
#ifndef A_H_INCLUDED#define A_H_INCLUDED#include "b.h"class A{public: B *b;};#endif // A_H_INCLUDED123456789101112
b.h:#ifndef B_H_INCLUDED#define B_H_INCLUDED#include "a.h"class B{public: A *a;};#endif // B_H_INCLUDED123456789101112
main.cpp:#include "a.h"#include "b.h"int main(){ return 0;}1234567
編譯就會報錯:「error: 『A』 does not name a type」。
預處理命令為「gcc -E -o a.i a.h」:
# 1 "a.h"# 1 "<built-in>"# 1 "<command-line>"# 1 "a.h"# 1 "b.h" 1# 1 "a.h" 1# 5,"b.h" 2class B{public: A *a;};
# 5 "a.h" 2class A{public: B *b;};。
(3)編譯來源時出錯擴展閱讀:
C++語言中定義了豐富的運算符,如算術運算符、關系運算符、邏輯運算符等等,有些運算符需要兩個操作數,使用形式為
<操作數1>運算符<操作數2>
這樣的運算符稱為二元運算符(或二目運算符)。另一些運算符只需要一個操作數,稱為一元運算符(或單目運算符)。
運算符具有優先順序與結合性。當一個表達式包含多個運算符時,先進行優先順序高的運算,再進行優先順序低的運算。如果表達式中出現了多個相同優先順序的運算,運算順序就要看運算符的結合性了。所謂結合性,是指當一個操作數左右兩邊的運算符優先順序相同時,按什麼樣的順序進行運算,是自左向右,還是自右向左。
例如,我們熟悉的算術表達式6+5-2中,「+」、 「-」是同級運算符,那麼是先算5-2,還是先算6+5?這就取決於算術運算符的結合性。由於算術運算符的結合性為自左向右,所以應先算6+5,然後再算11-2。