這很可能是你的教授有某種其他的文件,說professor_main.cc,他們會編寫這樣的項目:
g++ example.cc professor_main.cc -o project
他們professor_main.cc將有一個線
#include "example.h"
,它也將使用一些你的功能,並有可能測試他們正在做正確的事:
std::cout << (example_add(2,3) == 5) ? "good" : "bad" << std::endl;
現在,如果他們沒有#include example.h,或者如果你沒有正確創建這個文件,他們會在professor_main.cc上得到一個編譯錯誤,因爲它不知道example_add(int,int) 。應該在頭文件中並導致此錯誤消失的關鍵行是:
int example_add(int a, int b);
這稱爲函數聲明。
如果一切與頭做得正確,但你的教授犯了一個錯誤,並試圖編譯該項目沒有example.cc,像這樣:
g++ professor_main.cc -o project
然後,他們會得到一個連接誤差約一對example_add()的「未定義參考」。
現在缺少的是功能定義:
int example_add(int a, int b) { return a + b; }
這應該是在你的example.cc文件,如果教授包括他們的編譯命令行上,都應該很好。
但是,如果您在標頭文件中執行了#include「example.cc」,則一切都會不正常。實際上,你將複製並粘貼example.cc到professor_main.cc中,因爲它包含在那裏。但它顯然仍然在它自己的文件example.cc中。所以,如果你的教授試圖做到這一點:
g++ example.cc professor_main.cc -o project
他們會從鏈接獲得多個定義錯誤,因爲函數example_add()將已經定義兩次。
一般,那麼,你很可能應該做的是把所有的功能定義在源文件(.cc的),您的所有功能聲明在你的頭文件(.h)中。嘗試自己編譯另一個.cc文件,並試驗看看它是如何工作的。
來源
2013-03-26 18:39:01
svk
你能告訴我們您正在使用至極的編譯器/環境? – 2013-03-26 18:20:31
我正在使用g ++編譯 – pledgehollywood 2013-03-26 18:24:21
你確定他們不希望** lib **與該頭文件一起使用? – WhozCraig 2013-03-26 18:25:50