我想要在頭文件中聲明函數並在單獨的文件上實現它們。爲什麼我的標頭實現不起作用?
我從那裏我可以實例世界主要類:
#include "World.cc"
#include <iostream>
using namespace std;
int main() {
World say;
say.hello();
return 0;
}
我不斷收到一個錯誤,指出:
"multiple definition of `World::hello()'"
我想要在頭文件中聲明函數並在單獨的文件上實現它們。爲什麼我的標頭實現不起作用?
我從那裏我可以實例世界主要類:
#include "World.cc"
#include <iostream>
using namespace std;
int main() {
World say;
say.hello();
return 0;
}
我不斷收到一個錯誤,指出:
"multiple definition of `World::hello()'"
您需要包括這是main.cpp
#include "HelloWorld.h"
不是HeloWorld.cc
文件。
你想要聲明在頭文件中,和執行分開。客戶端代碼(main
你的情況)只需要聲明,所以它應該包含頭:
#include "World.h"
預處理包括是非常簡單的;它只不過是將#include
行替換爲它所命名的文件的內容。當您包含源文件World.cc
時,您導致使用main.o
目標文件構建定義。然後,當您將main.o
與World.o
鏈接時,它們都包含World.cc
功能的定義。
這將有助於OP解釋爲什麼使用'#include「HelloWorld.cc」'導致多個定義。 –
頭文件的要點是將其包含在實現文件和所有使用它的文件中。 –
'HelloWorld.cc'被_already_編譯到你的程序中,_along with_'main.cc'。通過'#include'到'main.cc'中,它會導致'World :: hello()'的多個實例出現在程序中,這會導致錯誤。頭文件中的代碼只是一個_declaration_,它不會產生任何實際的編譯代碼,這就是爲什麼包含在多個位置的安全原因。 – rossipedia