[英]Defining static const variable in 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中最新的抄送中,Apple LLVM 4.2(clang-425.0.28))
Undefined symbols "ClassA::SIZE" ...
可能是因為“ SIZE”在頭文件中定義,並且可以像宏一樣使用,所以ClassA.o不包含“ SIZE”作為符號。 同時,在“最小”模板中使用引用代碼時,某種程度上需要符號。 (我可以通過'nm'命令檢查ClassA.o不包含“ SIZE”符號,但是引用代碼的目標文件包含“ SIZE”符號。)
通過在ClassA.cpp中定義文字數,ClassA.o可以包含“ SIZE”符號,如下所示:
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)中起作用。 有什么好辦法解決這種情況嗎?
您需要為ClassA::SIZE
提供一個定義,但在聲明時仍要提供恆定的整數值:
/* ClassA.h */
class ClassA{
public:
static const size_t SIZE = 10; // value here
int array[SIZE];
funcA();
funcB();
...
};
/* ClassA.cpp */
const size_t ClassA::SIZE; // no value here
/* ClassA.h */
class ClassA{
public:
static const size_t SIZE = 10;
int array[SIZE];
funcA();
funcB();
...
};
const size_t ClassA::SIZE;
那應該工作。
為什么不使用枚舉?您可以在靜態方法中將數組定義為靜態變量(因此所有內容都在頭文件中)
class ClassA {
public:
enum {SIZE=10;};
static int *array() { static int arr[SIZE]; return arr; }
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.