2013-06-02 64 views
0

這些是我的文件。我想利用的main.cpp另一個類打印一條線,但它給出了一個錯誤 「未定義參考poddy:poddy()無法在C++中從main實例化另一個類

的main.cpp

#include <iostream> 
#include "poddy.h" 

using namespace std; 

int main() { 
    poddy le; 
    return 0; 
} 

poddy.h

#ifndef PODDY_H 
#define PODDY_H 

class poddy { 
    public: 
     poddy(); 
}; 

#endif // PODDY_H 

poddy.cpp

#include "poddy.h" 
#include <iostream> 

using namespace std; 

poddy::poddy() { 
    cout << "I am llalala and use anoder class" << endl; 
} 

請幫我!

+1

你用什麼來編譯和鏈接? – DXsmiley

+0

你是如何編譯它的?順便說一句,「使用名稱空間標準」幾乎從來都不是一件好事。 –

+0

@Joachim:那該怎麼做呢?寫'使用std :: ;'很多次? –

回答

4

您的C++代碼是正確的。 「未定義的引用」是一個鏈接器錯誤,與您編譯代碼的方式有關。爲了它鏈接,使用此命令行:

g++ poddy.cpp main.cpp 

下面是詳細信息:編譯C++代碼的過程有三個主要階段 - 預處理,編譯和鏈接。預處理器處理代碼中的#define#include語句。編譯器會獲取預處理結果,併爲每個翻譯單元生成二進制代碼(在您的情況下,有兩個翻譯單元 - poddy.cppmain.cpp)。最後,鏈接器建立翻譯單元內部分二進制代碼之間的連接。

預處理器和編譯器可以完成他們的工作,即使一次提供一個翻譯單元。但是,鏈接程序必須一次「查看」所有翻譯單元。當您調用g++而沒有附加標誌時,將調用編譯器的所有階段,包括鏈接器。這就是爲什麼您需要一次列出所有翻譯單元的原因。

+2

具體而言,您需要將所有源文件指定給編譯器。如果您在命令行中沒有引用poddy.cpp的情況下構建代碼,編譯器將無法構建它,並且鏈接器將不知道在哪裏找到它定義的類。 –

相關問題