我剛剛發現以下內容無效。在頭文件中初始化常量靜態數組
//Header File
class test
{
const static char array[] = { '1', '2', '3' };
};
哪裏是初始化這個最好的地方?
我剛剛發現以下內容無效。在頭文件中初始化常量靜態數組
//Header File
class test
{
const static char array[] = { '1', '2', '3' };
};
哪裏是初始化這個最好的地方?
//Header File
class test
{
const static char array[];
};
// .cpp
const char test::array[] = { '1', '2', '3' };
的最佳地點將是在源文件中
// Header file
class test
{
const static char array[];
};
// Source file
const char test::array[] = {'1','2','3'};
您可以在類的聲明就像你試圖做初始化整數類型;所有其他類型必須在類聲明之外初始化,並且只能使用一次。
不應該說「......在課堂*聲明* ...」嗎?我認爲'.h'是聲明,'.c'是定義,因此爲什麼只引用頭中聲明的整數類型會導致編譯器錯誤:'未定義的對test :: SOME_INTEGER的引用? (我意識到這聽起來超級挑剔和迂腐,我不想變得困難;我只是想確保我使用正確的術語,所以如果我錯了,絕對糾正我)。 – dwanderson 2016-02-15 15:55:21
你總是可以做到以下幾點:關於這個範式
class test {
static const char array(int index) {
static const char a[] = {'1','2','3'};
return a[index];
}
};
一對夫婦的好東西:
現在,在C++ 17,可以使用內變量
A simple static data member(N4424):
struct WithStaticDataMember { // This is a definition, no outofline definition is required. static inline constexpr const char *kFoo = "foo bar"; };
在您的例子:
//Header File
class test
{
inline constexpr static char array[] = { '1', '2', '3' };
};
應該只是工作
謝謝,是不知道你是否可以在成員身邊這樣做。 – user174084 2010-01-22 13:07:22
定義中沒有靜態的,請。 – 2010-01-22 13:07:45
爲什麼人們強調顯然不能編譯的代碼? – 2010-01-22 13:08:50