次のことが無効であることがわかりました。
//Header File
class test
{
const static char array[] = { '1', '2', '3' };
};
これを初期化するのに最適な場所はどこですか?
最適な場所はソースファイルです
// Header file
class test
{
const static char array[];
};
// Source file
const char test::array[] = {'1','2','3'};
クラス宣言で、しようとしたように整数型を初期化できます。他のすべての型は、クラス宣言の外側で一度だけ初期化する必要があります。
いつでも次のことができます。
class test {
static const char array(int index) {
static const char a[] = {'1','2','3'};
return a[index];
}
};
このパラダイムについてのいくつかの素晴らしいこと:
//Header File
class test
{
const static char array[];
};
// .cpp
const char test::array[] = { '1', '2', '3' };
これで、C++ 17では、インライン変数を使用できます
単純な静的データメンバー( 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' };
};
うまくいくはず