2011-08-21 51 views
1

以下3個代碼塊分別是main.cpp,static_class_array.cpp和static_class_array.h。我收到以下錯誤:類問題中的靜態int數組

static_class_array.cpp||In constructor 'static_array_class::static_array_class()':| 
static_class_array.cpp|5|error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment| 
||=== Build finished: 1 errors, 0 warnings ===| 


#include "static_class_array.h" 

int main() 
{ 
    static_array_class* array_class; 

    array_class = new static_array_class(); 

    delete array_class; 

    return 0; 
} 


#include "static_class_array.h" 

static_array_class::static_array_class() 
{ 
    static_array_class::array[3] = {0,1,2}; 
} 
static_array_class::~static_array_class(){} 



#ifndef STATIC_CLASS_ARRAY_H 
#define STATIC_CLASS_ARRAY_H 

class static_array_class 
{ 
    private: 

     static int array[3]; 

    public: 

    static_array_class(); 
    ~static_array_class(); 
}; 
#endif 

回答

2

我認爲,要在實現文件是什麼:

static_array_class::static_array_class() 
    { 
    } 
    static_array_class::~static_array_class(){} 

    int static_array_class::array[3] = {0,1,2}; 

在提交代碼錯誤消息

"cannot convert 'brace-enclosed initializer list' to 'int' in assignment"

的說明。

這是因爲代碼:

static_array_class::array[3] = {0,1,2}; 

被解釋爲意思是{0,1,2}應的陣列中被分配給元素3。元件3int型的,(順帶未分配爲第四元件),所以這是這樣的:

int i = 0; 
i = {0,1,2}; 

因此,錯誤消息。

+0

告訴我我有一個衝突的聲明。 – pandoragami

2

他們是不是同一類型;

你的類是一個包含一個數組的類 - 他們其他只是一個數組。

不同,需要聲明的實際實例的類之外,就像任何其他靜態類成員的靜態清晰度,

int static_array_class::array[3] = {0,1,2}; // note this line is outside the constructor 

static_array_class::static_array_class() 
{ 
} 
static_array_class::~static_array_class(){} 
+0

我猜?所以這意味着它不可能這樣做或... – pandoragami

+0

當然是可能的編碼 - 你只需要多一點 - 一個類的靜態成員初始化不在縮小但在課堂外,因爲他們不是實際上是在構建/解構中採取的一部分 - 幾乎可以將它們視爲名稱空間的一部分而不是類。 – Soren

+0

也看到這個問答:http://stackoverflow.com/questions/185844/initializing-private-static-members – Soren