C++函式多重定義問題
阿新 • • 發佈:2019-01-08
C++標頭檔案包括了函式的宣告.以及在標頭檔案中實現了函式的定義.
那麼這個標頭檔案.在別的地方只能被#include一次。
如果在其他的地方 至少兩次 #include這個標頭檔案.那麼就會出現函式多重定義的問題.
C++在編譯標頭檔案的時候.已經找到了該函式的宣告 和它的定義.
再次呼叫標頭檔案的時候。出現兩個定義。而編譯器不知道該選擇哪個定義。所以會出現錯誤.
#ifndef TEST_ONE_H
#define TEST_ONE_H
#include <iostream>class TestOne
{
public:
TestOne();
~TestOne();
void Speak();
private:};void TestOne::Speak()
{
std::cout << "1";
}TestOne::TestOne()
{
}TestOne::~TestOne()
{
}#endif // ! TEST_ONE_H這是一個TestOne的標頭檔案.我要在test.cpp中呼叫他的函式.
#include <iostream>
#include "TestOne.h" --------------->在這裡包含了它的標頭檔案
int main()
{
TestOne * testone = new TestOne();
testone->Speak();
std::cin.get();
return 0;
}
下面在TestOne.cpp檔案中 包含它的標頭檔案
#include"TestOne.h"
那麼結果就是 TestOne.cpp 和 test.cpp中包含了共同的標頭檔案.那麼就會編譯錯誤
找到一個或多個多重定義的符號:
這個時候去掉一個就行了.
建議還是標頭檔案填寫函式宣告.而函式實現放在Cpp檔案中.