2012-08-23 164 views
2

我定义下面的结构如何赋值给一个数组,这是一个struct成员?

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

我想建立一个“CCPtDist”叫tmpPtDist变量,要分配双号wDist:

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

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

+0

我相信'double [] wDist = new double [8];'是语法错误。你确定这*完全是*你的代码中有什么?它可能是'double * wDist = ...'吗? –

回答

1

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

尝试将其更改为这样的事情

struct CCPtDist 
{ 
    double* wDist; 

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

比这更好的做法是让wDist成为'std :: vector '。 – Mankarse

+0

@人只有当你想拥有可变数量的元素。我认为'std :: array'在这种情况下是最好的。 – Antimony

4

至于C风格的数组的替换,可以使用std::array:(!)

#include <array> 

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

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

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

struct CCPtDist 
{ 
    double wDist[8]; 
}; 

就足够了。但是请注意,这个数组的8个值不是以这种方式初始化的。他们将包含随机垃圾。如果你的编译器支持它,使用std::array,这是在C++ 11出台,可能是一个更好的方法,如SRN的答案描述

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

:因此,更好地补充一点,初始化数组构造函数。

相关问题