静态int数组中的类问题

static int array in a class problem

本文关键字:问题 int 数组 静态      更新时间:2023-10-16

下面三个代码块分别是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

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

    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};

它们不是同一种类型;

你的类是一个包含一个数组的类——它们只是一个数组。

对于类成员的静态定义,您需要在类外部声明实际实例,就像使用其他静态定义一样,

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(){}