我定义了以下结构
struct CCPtDist
{
double[] wDist = new double[8];
};
我想构建一个名为tmpPtDist的“CCPtDist”变量,并希望为wDist分配一个双号:
CCPtDist tmpPtDist;
tmpPtDist.wDist[0] = 233.7;
但是g ++编译器返回错误:'struct CCPtDist'没有名为'wDist'的成员?
答案 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的答案所述。