2015-09-07 47 views
1

我想要在頭文件中聲明函數並在單獨的文件上實現它們。爲什麼我的標頭實現不起作用?

我從那裏我可以實例世界主要類:

#include "World.cc" 
#include <iostream> 

using namespace std; 

int main() { 
    World say; 
    say.hello(); 
return 0; 
} 

我不斷收到一個錯誤,指出:

"multiple definition of `World::hello()'" 

回答

5

您需要包括這是main.cpp

#include "HelloWorld.h"

不是HeloWorld.cc文件。

+2

這將有助於OP解釋爲什麼使用'#include「HelloWorld.cc」'導致多個定義。 –

+1

頭文件的要點是將其包含在實現文件和所有使用它的文件中。 –

+2

'HelloWorld.cc'被_already_編譯到你的程序中,_along with_'main.cc'。通過'#include'到'main.cc'中,它會導致'World :: hello()'的多個實例出現在程序中,這會導致錯誤。頭文件中的代碼只是一個_declaration_,它不會產生任何實際的編譯代碼,這就是爲什麼包含在多個位置的安全原因。 – rossipedia

2

你想要聲明在頭文件中,和執行分開。客戶端代碼(main你的情況)只需要聲明,所以它應該包含頭:

#include "World.h" 

預處理包括是非常簡單的;它只不過是將#include行替換爲它所命名的文件的內容。當您包含源文件World.cc時,您導致使用main.o目標文件構建定義。然後,當您將main.oWorld.o鏈接時,它們都包含World.cc功能的定義。

相關問題