我正在處理我的引擎的核心問題,我在Microsoft Visual C++ express中遇到了嚴重的鏈接問題。命名空間和包含文件的C++鏈接錯誤
爲了簡化,引起問題的是這兩個頭文件,每個頭文件都有一個帶有不同標識符的名稱空間。這兩個文件實際上都包含對方。編譯沒有錯誤,但是在鏈接時,錯誤顯示「X已經在A.obj中定義」。一個例子如下規定:
端頭1
#ifndef HEADER1_H
#define HEADER1_H
#include "header2.h"
namespace Core{
int x, y, z;
}
#endif
首部2
#ifndef HEADER2_H
#define HEADER2_H
#include "header1.h"
namespace GUI{
int x, y, z;
}
#endif
結束意外事件發生時,我得到一個錯誤,指出在x,y和z變量已經在創建的第一個.obj文件中定義。我認爲,因爲變量來自不同的命名空間,所以它們不會相互衝突。我也有頭文件,所以頭文件似乎並沒有被多次包含。
無論如何,任何形式的幫助或建議將不勝感激。我一直堅持這個約3天:P。另外,如果我沒有提供足夠的信息,請告訴我,這只是我現在的代碼非常長。
乾杯, 喬伊
簡短的答案是:沒有包含對方的標題。 – 2012-04-05 00:27:17
好吧,是的,我有一種感覺,它可能會導致一些問題,但是我怎麼能讓標題1的cpp訪問標題2,反之亦然。或者這是我設計中的嚴重缺陷? – 2012-04-05 00:30:10
他們不能直接訪問彼此。所以也許你需要一些[前向聲明](http://en.wikipedia.org/wiki/Forward_declaration)。 – 2012-04-05 00:31:23