在类中初始化const数组

时间:2012-10-05 07:31:48

标签: c++ visual-c++

在Visual C ++中,如何初始化类中的常量数组?

这是一个如何在课外进行的例子:

const char k_colors[] = 
{ 
    'R', 
    'G', 
    'B',
};

现在我该如何改变呢? (我尝试在它前面放置静电,这不起作用)

编辑:你是对的,我应该只使用单个字符。

4 个答案:

答案 0 :(得分:3)

  

我尝试将静态放在它前面,但是没有工作

您无法在类定义中初始化static成员数组(或任何成员数组)。在类定义之外做它:

class X
{
    static const char* k_colors[3];
};

const char* X::k_colors[] = { "Red", "Green", "Blue" };

答案 1 :(得分:3)

如果您希望它是静态的,您需要在课外进行初始化:

class foo
{
public:
    static const char k_colors[3];
    foo() { }

};

const char foo::k_colors[] = {'a', 'b', 'c'};

此外,您可能希望它是const char *[],因为它看起来像您正在尝试初始化字符串,所以它是:

const char *foo::k_colors[] = {"Red", "Green", "Blue"};

答案 2 :(得分:1)

在C ++ 11中,您可以使用构造函数初始化列表,如上所述

class A {
    const int arr[2];

    // constructor
    A() 
    : arr ({1, 2}) 
    { }
};

或者你可以使用静态const数组

在头文件中:

class A {
    static const int a[2];
    // other bits follow
};

在源文件中(或与上述声明分开放置)

const int A::a[] = { 1, 2 }; 

当然,您也可以始终使用std::vector<int>for循环。

答案 3 :(得分:0)

我认为您可以通过constructor initializer列表

进行初始化

参考here

char也应为char*

从以上链接中摘录:

在C ++ 11之前,您需要这样做以默认初始化数组的每个元素:

: k_colors()

使用C ++ 11时,建议使用统一初始化语法:

: k_colors{ }

通过这种方式,您可以将事物放入数组中,而不是之前:

: k_colors{"red","green"}