我定義下面的結構如何賦值給一個數組,這是一個struct成員?
struct CCPtDist
{
double[] wDist = new double[8];
};
我想建立一個「CCPtDist」叫tmpPtDist變量,要分配雙號wDist:
CCPtDist tmpPtDist;
tmpPtDist.wDist[0] = 233.7;
但是g ++編譯器返回一個錯誤:'struct CCPtDist'沒有名爲'wDist'的成員?
我定義下面的結構如何賦值給一個數組,這是一個struct成員?
struct CCPtDist
{
double[] wDist = new double[8];
};
我想建立一個「CCPtDist」叫tmpPtDist變量,要分配雙號wDist:
CCPtDist tmpPtDist;
tmpPtDist.wDist[0] = 233.7;
但是g ++編譯器返回一個錯誤:'struct CCPtDist'沒有名爲'wDist'的成員?
代碼中有很多錯誤。首先,如果您將數組聲明爲成員,則內存將作爲結構的一部分內聯分配。你不能只爲它指定一個任意的指針。其次,我不認爲你正確地聲明瞭陣列。第三,你需要在構造函數中進行復雜的初始化。 我很驚訝它不會給你在double[] wDist = new double[8];
行的編譯錯誤。
嘗試將其更改爲這樣的事情
struct CCPtDist
{
double* wDist;
CCPtDist(): wDist(new double[8]) {}
};
至於C風格的數組的替換,可以使用std::array
:(!)
#include <array>
struct CCPtDist
{
std::array<double,8> wDist;
};
int main()
{
CCPtDist tmpdist;
tmpdist.wDist[0]=233.7;
}
如果你想有一個固定大小數組作爲你的結構的一部分,不需要動態分配(即new
):
struct CCPtDist
{
double wDist[8];
};
就足夠了。但是請注意,這個數組的8個值不是以這種方式初始化的。他們將包含隨機垃圾。如果你的編譯器支持它,使用std::array
,這是在C++ 11出臺,可能是一個更好的方法,如SRN的答案描述
struct CCPtDist
{
double wDist[8];
CCPtDist():wDist() {}
};
:因此,更好地補充一點,初始化數組構造函數。
我相信'double [] wDist = new double [8];'是語法錯誤。你確定這*完全是*你的代碼中有什麼?它可能是'double * wDist = ...'嗎? –