如何为数组赋值,这是一个结构成员?

时间:2012-08-23 03:13:34

标签: c++ g++

我定义了以下结构

struct CCPtDist
{
  double[] wDist = new double[8];
};

我想构建一个名为tmpPtDist的“CCPtDist”变量,并希望为wDist分配一个双号:

CCPtDist tmpPtDist;
tmpPtDist.wDist[0] = 233.7;

但是g ++编译器返回错误:'struct CCPtDist'没有名为'wDist'的成员?

3 个答案:

答案 0 :(得分:4)

作为C风格数组的替代方案,您可以使用std::array

#include <array>

struct CCPtDist
{
  std::array<double,8> wDist;
};

int main()
{   
  CCPtDist tmpdist;
  tmpdist.wDist[0]=233.7;
}

答案 1 :(得分:1)

代码中存在许多错误。首先,如果将数组声明为成员,则内存将作为结构的一部分内联分配。你不能只是为它指定一个任意指针。第二关,我认为你无论如何都没有正确地声明数组。第三,你需要在构造函数中进行类似的复杂初始化。  我很惊讶它没有给你double[] wDist = new double[8]; 行的编译错误。

尝试将其更改为此类

struct CCPtDist
{
    double* wDist;

    CCPtDist(): wDist(new double[8]) {}
};

答案 2 :(得分:0)

如果您希望将固定大小(!)数组作为结构的一部分,则无需动态分配(即new):

struct CCPtDist
{
  double wDist[8];
};

就足够了。但请注意,此数组的8个值未以此方式初始化。它们将包含随机垃圾。所以最好添加一个初始化数组的构造函数:

struct CCPtDist
{
  double wDist[8];
  CCPtDist():wDist() {}
};

如果您的编译器支持它,那么使用在C ++ 11中引入的std::array可能是更好的方法,如SRN的答案所述。