2012-10-05 91 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循環。