![](/img/trans.png)
[英]Can a C++ class contain a static const std::array initialized inline in a header file?
[英]Should a const static variable be initialized in a c++ header file?
my_test.h
#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}
) Alok已經回答了你的問題,但這里有一些簡單的經驗法則,易於記憶:
因此,靜態成員需要在.h文件中聲明 ,然后在.cpp文件中定義 。 在您的情況下,修復聲明的語法,然后將它們移動到“my_test.cpp”文件。
問題是你對A::b
定義不包含類型。 要成為有效的定義,它應該是:
const obj A::b = {1, 2};
這將消除編譯錯誤,但如果將此標頭包含在多個源文件中,您仍會遇到鏈接器錯誤,因為A::b
將被多重定義。 您應該將定義移動到.cpp文件中。
無論您是否有頭文件保護,將初始化放在頭文件中意味着您將在包含該頭文件的每個源文件中獲得A::b
的實例。 因此鏈接器錯誤。
所以,一般來說,這是可能的,但不是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.