1. 程式人生 > >C++函式多重定義問題

C++函式多重定義問題

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檔案中.