2015-11-03 40 views
0

我基本上試圖從C++中的類實例化對象並使用其中一個成員函數。這感覺就像一個非常標準的問題,但我在網上找到的所有解決方案都是簡單的支架問題,或者看起來很明顯的範圍解析問題,或者是大量複雜的例子,它們掩蓋了過度複雜的實際情況。我非常感謝任何能夠幫助我理解我在做什麼錯誤的文件。使用頭文件和實現文件實例化和使用C++類

我得到的錯誤是

未定義的參考測試::測試() '

未定義的引用)來測試:: MSG('

我有三個文件,一個main,一個Test.hpp和Test.cpp。

的main.cpp

#include "Test.hpp" 
#include <iostream> 
using namespace std; 

int main(){ 

    Test var; 
    var.msg(); 

    return 0; 
} 

Test.hpp

#ifndef TEST_HPP 
#define TEST_HPP 

class Test{ 
public: 
    Test(); 
    void msg(); 
}; 
#endif 

Test.cpp的

#include "Test.hpp" 
#include <iostream> 
using namespace std; 

Test::Test(){ 
    cout << "instantiated\n\n"; 
} 
void Test::msg(){ 
    cout << "Hello\n\n"; 
} 
+0

顯然你沒有編譯Test.cpp,或者沒有將生成的目標文件與你的程序鏈接起來。 – Quentin

+0

你用什麼IDE?順便說一句,不包括iostream在你的主 – KostasRim

+0

我在ubuntu中使用g ++進行編譯。感謝iostream反饋btw。 –

回答

0

考慮到你使用的代碼塊作爲IDE只是去:項目設置 - >項目編譯選項 - >搜索目錄 - >添加並找到.cpp和.h文件的位置。然後它會問你是否想保持這種相對路徑。說不。

如果你使用一些其他的IDE它的幾乎相同的進程,只是評論我,我會爲你提供的步驟。

順便說一句,沒有必要在主要包括iostream,因爲你已經將它包含在測試中。

+0

我實際上使用g ++作爲我的編譯器而不是代碼塊。根據使用的IDE /編譯器,鏈接是否發生了不同?看起來這可能是我的主要問題。 –

+0

$ gcc -o輸出file1.o file2.o然後就完成了。讓我知道它是否有效,其中file1和file2是你的文件(改用你的文件名)。和這個$ gcc -c file1.c來獲取對象文件。 – KostasRim

+0

以下鏈接顯示了類似的方法。看起來像這個工作。對於其他人使用相同的設置進行清理。我不得不在命令中運行g ++ -o programName main.cpp file1.cpp file2.cpp,而不使用頭文件。我可以得到這個編譯使用g ++ http://stackoverflow.com/questions/3202136/using-g-to-compile-multiple-cpp-and-h-files –