2

我定义了以下结构

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

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

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

但是 g++ 编译器返回错误:'struct CCPtDist' has no member named 'wDist'?

4

3 回答 3

4

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

#include <array>

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

int main()
{   
  CCPtDist tmpdist;
  tmpdist.wDist[0]=233.7;
}
于 2012-08-23T03:21:34.510 回答
1

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

试着把它改成这样

struct CCPtDist
{
    double* wDist;

    CCPtDist(): wDist(new double[8]) {}
};
于 2012-08-23T03:17:00.570 回答
0

如果您想要一个固定大小(!)数组作为结构的一部分,则不需要动态分配(即new):

struct CCPtDist
{
  double wDist[8];
};

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

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

如果您的编译器支持它,则使用std::arrayC++11 中引入的 using 可能是一种更好的方法,如 SRN 的回答中所述。

于 2012-08-23T03:31:08.223 回答