2013-03-08 43 views
0

我嘗試使用C++在單獨的文件中放置一個類,但沒有包含它不工作的.cpp文件。在單獨的文件中放置一個類無法正常工作[C++]

這是類實例

//Example.cpp 
#include "Example.h" 
#include<iostream> 
using namespace std; 

Example::Example() 
{ 
    cout<<"I am am Executed\n"; 
} 

CPP文件這是頭文件

//Example.h 
#ifndef EXAMPLE_H 
#define EXAMPLE_H 


class Example 
{ 
    public: 
     Example(); 
}; 
#endif 

現在如果我不包括C++文件到我的主要功能文件時,它給出了一個錯誤

#include "Example.h" 
//#include "Example.cpp" 
#include<iostream> 
using namespace std; 
int main() 
{ 
    Example aak; 
    return 0; 
} 

所以我在這裏已經註釋掉//#包括 「Example.cpp」,它會給我的錯誤,指出

/tmp/ccuHMRJB.o: In function `main': 
main.cpp:(.text+0x10): undefined reference to `Example::Example()' 
collect2: ld returned 1 exit status 

但是如果我取消註釋的#include「Example.cpp」它工作得很好!給我一個輸出

我被執行了!

我不明白爲什麼我需要包括兩個文件(.H以及的.cpp)執行程序。只要我認爲應該通過包括.h文件工作,但它不會......

+1

您需要編譯兩個源文件,並將它們鏈接在一起的鏈接器拋出一個錯誤。請向我們展示您用於構建程序的命令。 – 2013-03-08 18:22:31

回答

0

您應該將.cpp文件添加到您的項目或生成文件。 .cpp文件必須符合並鏈接到您的項目。

並避免在您的代碼中包含.cpp文件。

在你的情況下,編譯器在對象(編譯)文件中尋找Example::Example()正文,但它找不到它。

1

您應該不是包括.cpp文件在其他.cpp文件。相反,請在編譯器命令行中列出組成項目的所有.cpp文件。

0

這是因爲當你包含cpp文件時,文件(即函數)也正在被編譯。但是當你包含原型文件,即頭文件時,你還必須指定在哪裏搜索功能代碼的可執行代碼。意味着鏈接器將找出你已經以二進制形式(已編譯)存儲cpp文件的庫,否則需要編譯它。我認爲後者是你的情況(即你沒有從你的cpp文件創建一個庫)。現在想想如果你不包含cpp文件,它不會被編譯。然後你調用一個二進制代碼不存在的函數。


因此,如果你不包括cpp文件