以下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
答案 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};
因此出现错误信息。