C++在寫靜態變數時容易犯的一個小錯誤

pamxy發表於2014-10-08


在A.h標頭檔案裡這樣定義

#ifndef A_H
#define A_H
class A
{
private:
	A();
	~A();
	static int m_num;
};
int A::m_num;
#endif

結果發現

Error	3	error LNK2005: "private: static int <span style="font-family: Arial, Helvetica, sans-serif;">A</span><span style="font-family: Arial, Helvetica, sans-serif;">::m_num" (?m_num@A@@0HA) already defined in A.obj</span>
Error	4	error LNK1169: one or more multiply defined symbols found

這時可能會很困惑,明明就定義一次,為什麼就說多次定義呢?

結果就這麼小的一個問題就得浪費你幾分鐘。

原來在A.cpp檔案裡匯入了A.h標頭檔案

#include "A.h"
而其他檔案如main.cpp檔案裡也匯入了A.h標頭檔案,導致了出現多次定義的問題,我就不解了,不是有標頭檔案衛兵嗎?但事實就是這樣,所以一般有.h檔案和.cpp檔案的類的static變數的初始化都得放在.cpp檔案裡初始化,不然會出現多重定義問題,謹記!


相關文章