我最近遇到了一個問題。C++鏈接錯誤,符號重定義
我有三個文件啊,B.cpp,C.cpp:
啊
#ifndef __A_H__
#define __A_H__
int M()
{
return 1;
}
#endif // __A_H__
B.cpp
#include "A.h"
C.cpp
#include "A.h"
由於我通過MSVC三個文件comile,有一個錯誤:
C.obj : error LNK2005: "int __cdecl M(void)" ([email protected]@YAHXZ) already defined in B.obj
這是很容易理解,因爲我們知道,B.OBJ有一個名爲 「M」,也C.obj有一個 「M」 的標誌。 這裏出現錯誤。
然而,如果我改變M法,其含有一個方法M.這樣下面的類:
A.H
#ifndef __A_H__
#define __A_H__
class CA
{
public:
int M()
{
return 1;
}
};
#endif // __A_H__
沒有更多的錯誤!有人能告訴我發生了什麼事嗎?
您不能在頭文件中定義函數,而是在頭文件中聲明它們。但是,類可以在頭文件中聲明。所有函數定義都應該轉到源文件,除了少數內聯。 – 2013-04-11 06:24:12