类问题中的静态int数组

时间:2011-08-21 23:57:58

标签: c++ arrays static

以下3个代码块分别是main.cpp,static_class_array.cpp和static_class_array.h。我收到以下错误:

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 个答案:

答案 0 :(得分: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(){}

答案 1 :(得分:2)

我认为您在实现文件中想要的是:

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

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

错误消息说明

  

“无法将'大括号括起来的初始值列表'转换为'int'   分配“

提交的代码。

这是因为代码:

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

被解释为应该将{0,1,2}分配给数组中的元素3。元素3的类型为int,(顺便说一句,未分配为第四个元素),所以这就像:

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

因此出现错误信息。