2012-10-05 71 views
0

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

这是如何做到这一点的一类之外的例子:

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

现在怎么做,我需要改变这种状况? (我试图把它放在它前面,这是行不通的)

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

+2

难道你不是指'const char *'和'“Red”'等等吗? –

+1

那么,根本不起作用,因为你使用多个字符文字,它应该只有一个字符。你的意思是'char *'和例如' “红”'? –

+0

您的编译器是否支持C++ 11功能? – hmjd

回答

0

我想你可以通过constructor initializer列表初始化

参考here

另外,char应该是从上面的链接char*

提取物:

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

: k_colors() 

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

: k_colors{ } 

而且这样你实际上可以把东西放入数组,你没法过了:

: k_colors{"red","green"} 
+2

一个数组? (我认为你可以在C++ 11中,但是你肯定不能在C++ 03中。) –

+0

@JamesKanze呃..向右添加链接 – Anirudha

3

我试图在它面前,没有工作将静态

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

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

const char* X::k_colors[] = { "Red", "Green", "Blue" }; 
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"}; 
1

在C++ 11可以使用构造函数初始化列表中所提到

class A { 
    const int arr[2]; 

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

或者可以使用静态常量阵列

在头文件:

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

在源文件(或从上面的声明单独的地方)

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

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