2011-08-21 294 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