2011-01-26 120 views
0

當我試圖運行下面的C++程序:UPDATE(更新代碼,因爲過去的紐帶有一些錯誤):http://pastie.org/private/pdpfpzg5fk7iegnohebtqUPDATE:C++未定義參考

我得到如下:

enter image description here

UPDATE

出現的現在如下錯誤:

enter image description here

對此有何看法?

謝謝。

+0

請添加某種形式的tabification到您的代碼。現在閱讀很痛苦。此外,您應該只能將GradeBook類定義和導致鏈接器錯誤的行添加到此問題中,從而避免潛在的答覆者不必單擊鏈接來獲取有關該問題的更多信息。 – 2011-01-26 11:50:21

+1

(1)請發佈您的代碼_here_。讓我們難以找到並閱讀你的代碼是沒有用的。 (2)複製和粘貼在計算機上無法正常工作?你有沒有發佈截圖的原因? – 2011-01-26 11:50:33

+0

@詹姆斯麥克奈利斯。只是沒有想到在發佈問題時粘貼在pastie上的屏幕截圖。謝謝。 – Simplicity 2011-01-26 11:52:34

回答

2

你不是在GradeBook.o鏈接使你得到一個undefefined參考。 嘗試

g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain 

您還在GradeBook.h

1

引用一個我最喜歡的IRC機器人:未定義的引用是鏈接器錯誤。這不是編譯錯誤。 #包括沒有幫助。您沒有在錯誤消息中定義事件,您忘記鏈接定義它的文件,忘記鏈接到定義它的庫,或者如果它是靜態庫,則鏈接器命令行上的順序不正確。檢查哪一個。

2

你沒有告訴你的編譯器在哪裏可以找到GradeBook構造函數定義(因此是「未定義的引用」)。您需要將所有源文件分別傳遞給編譯器,或者爲所有編譯單元創建中間目標文件,並將它們鏈接在一起。

有效,最簡單的方法是這樣的:

g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain 
1

C++有一個錯字 「maximun」,而不是 「最大」 是區分大小寫的。因此,例如,您可以顯示消息,但您定義的是DisplayMessage。這是兩個截然不同的功能。您應該將DisplayMessage的定義更改爲displayMessage,或者將其稱爲DisplayMessage而不是displayMessage

0

您還需要在GradeBook.cc中進行編譯。

目前類本身沒有被編譯或鏈接,因此,鏈接器無法找到GradeBook類 - 導致它抱怨。

1

你的編譯器告訴你的是,GradeBook類是定義的,並且在編譯階段一切正常,但是當需要鏈接完整的可執行程序時,它無法找到該類的實際代碼。這是因爲您只編譯和鏈接GradeBookMain.cc而不是GradeBook.cc。您可以編譯,並在同一時間這樣的鏈接他們兩個:

g++ GradeBookMain.cc GradeBook.cc -o program 

或者你可以單獨編譯它們,然後連結在一起,

g++ -c GradeBookMain.cc -o GradeBookMain.o 
g++ -c GradeBook.cc  -o GradeBook.o 
g++ GradeBookMain.o GradeBook.o -o program