my_test.h應該在C++頭文件中初始化一個const靜態變量嗎?
#ifndef MY_TEST
#define MY_TEST
struct obj {
int x;
int y;
};
class A {
private:
const static int a=100;
const static obj b;
};
const obj A::b={1,2};
#endif
當使用該頭文件編譯CPP,錯誤發生'multiple definition of 'A::b'
。
- 爲什麼當我已經使用警衛宏?
- 爲什麼
A::a
不產生錯誤? (我不能在class A
編寫代碼const static obj b={1,2}
)
對於OP,作爲初學者,「你需要」是正確的。然而,作爲一個絕對的技術聲明它並不是,因爲類模板有一個ODR的例外。這意味着在技術上,如果真的需要它,可以在類模板中定義靜態常量,然後從任意專業化繼承。它有時被稱爲模板化的常量技巧。一個更實用的方法來避免一個實現文件(如果有的話)是通過一個內聯函數提供對常量的訪問(它可以將常量當作本地函數)。 – 2013-02-22 10:07:22
@Alf:我同意你的評論說的。事實上,這是一個很好的信息。 – 2013-02-22 13:55:21