我有一个基本的 C++ 类。标题如下所示:
#pragma once
class DataContainer
{
public:
DataContainer(void);
~DataContainer(void);
int* getAgeGroup(void);
int _ageGroupArray[5];
private:
int _ageIndex;
};
现在,在类的 cpp 文件中,我想使用类构造函数中的默认值初始化 _age GroupArray[5],如下所示:
#include "DataContainer.h"
DataContainer::DataContainer(void)
{
_ageGroupArray={20,32,56,43,72};
_ageIndex=10;
}
int* DataContainer::getAgeGroup(void){
return _ageGroupArray;
}
DataContainer::~DataContainer(void)
{
}
这样做我在 _ageGroupArray 行上得到“表达式必须是可修改的左值”。那么在构造函数中初始化数组对象是完全不可能的吗?我发现的唯一解决方案是在范围标识符之外定义数组。对此的任何澄清将不胜感激。
在当前标准中,正如您已经注意到的,您无法使用初始化列表语法在构造函数中初始化成员数组。有一些解决方法,但没有一个是真正漂亮的:
// define as a (private) static const in the class
const int DataContainer::_age_array_size = 5;
DataContainer::DataContainer() : _ageIndex(10) {
int tmp[_age_array_size] = {20,32,56,43,72};
std::copy( tmp, tmp+_age_array_size, _ageGroupArray );
}
如果数组中的值始终相同(对于类中的所有对象),那么您可以创建它的单个静态副本:
class DataContainer {
static const int _ageGroupArraySize = 5;
static const int _ageGroupArray[ _ageGroupArraySize ];
// ...
};
// Inside the cpp file:
const int DataContainer::_ageGroupArray[_ageGroupArraySize] = {20,32,56,43,72};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)