5

我有一个基本的 C++ 类。标题如下所示:

#pragma once
class DataContainer
{
public:
    DataContainer(void);
   ~DataContainer(void);
    int* getAgeGroup(void);
    int _ageGroupArray[5];
private:

     int _ageIndex;

};

现在在类的 cpp 文件中,我想用类构造函数中的默认值初始化 _ageGroupArray[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 行上得到“表达式必须是可修改的左值”。那么在构造函数中初始化数组对象是完全不可能的吗?我找到的唯一解决方案是在范围标识符之外定义数组。对此的任何澄清将不胜感激。

4

3 回答 3

7

正如您已经注意到的,在当前标准中,您无法使用初始化列表语法在构造函数中初始化成员数组。有一些解决方法,但没有一个真的很漂亮:

// 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};
于 2011-07-11T07:41:47.770 回答
5

您可以在创建/声明数组时初始化数组,而不是在那之后。

您可以在构造函数中这样做:

_ageGroupArray[0]=20;
_ageGroupArray[1]=32;
_ageGroupArray[2]=56;
_ageGroupArray[3]=43;
_ageGroupArray[4]=72;

重要的是要知道这是Assignment而不是Initialization

于 2011-07-11T07:38:12.503 回答
1

试试这个:

int ageDefault[]={20,32,56,43,72};
memcpy(_ageGroupArray, ageDefault, sizeof(ageDefault));
于 2011-07-11T07:41:36.280 回答