我有這樣一個類:在C++中定義靜態常量變量
/* ClassA.h */
class ClassA{
public:
static const size_t SIZE = 10;
int array[SIZE];
funcA();
funcB();
...
};
而且,在其他CPP文件中,有這樣的代碼:
min(ClassA::SIZE, other_variable);
但是,我不能建立這個代碼,我也得到類似下面的錯誤(在Mac OS X的最新CC,蘋果LLVM 4.2(鐺-425.0.28))
Undefined symbols "ClassA::SIZE" ...
很可能是因爲 「大小」 是德在頭文件中被罰款並且可以像宏一樣使用,ClassA.o不包含「SIZE」作爲符號。同時,在「min」模板內使用代碼時,需要符號。 (我可以通過'nm'命令檢查ClassA.o不包含「SIZE」符號,但引用代碼的目標文件包含「SIZE」符號。)
ClassA.o可以通過定義文字「SIZE」像在ClassA.cpp數以下:
const int ClassA::SIZE = 10;
但在這種情況下,存在如下面另一個錯誤,由於在頭文件被定義的數組。
error: fields must have a constant size: 'variable length array in structure' extension will never be supported
原始代碼在一些較老的編譯器(LLVM 4.0)中工作。 解決這種情況的好主意?
你使用命名空間嗎?如果需要,您可能需要添加名稱空間。 – Djon
我有一個非常類似的問題,但與C,而不是C++。我還發現,'gcc'在它的目標文件中保留了'static const'變量。 (可能不適用於你的情況?) 我在這裏發佈問題/答案之前做了更多研究。 –