2012-08-23 162 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() {} 
}; 

:因此,更好地補充一點,初始化數組構造函數。

相關問題