2013-05-04 47 views
1

即時通訊編寫一個類,但我不確定如何創建數組的setter和getters(對不起,這是一個基本的問題!)我得到以下錯誤:如何爲數組寫入setter和getters? (C++)

expected前主表達式「]」令牌

這裏是我的代碼:

Class planet: public body 
{ 
private: 
    string name[]; 
    string star[]; 
public: 
    void nameSetter (string h_name[]) 
    { 
     name[] = h_name[]; 
    } 
}; 

再次我對這樣的我愚蠢的問題抱歉,我知道我不是在傳遞一個索引通過,但是,當我創建索引它拋出了大量的錯誤!

+0

你想地球的每個實例有1名和1星?如果是這樣,你不需要字符串數組,這是你的名字和明星的聲明暗示你想要的。 – Rich 2013-05-04 13:37:02

回答

3
string name[]; 

這不是一個數組,它是一個指針。改爲使用vectors

+0

當我使用這種方法時,它說以下錯誤: 將'const std :: vector >'賦值給std :: vector > [0]中的不兼容類型。 ' 在表示name = h_name的行上; – 2013-05-04 12:35:05

+0

@BenjaminLindley:哦,是的,[它是](http://ideone.com/toq2ok)。還要看着名的int main(int argc,char * argv [])'。 – ybungalobill 2013-05-04 12:37:15

+0

@DamienRenner:[此代碼編譯](http://ideone.com/vknML1),所以錯誤必須來自您沒有顯示的代碼的其他部分。 – ybungalobill 2013-05-04 12:39:26

2

C++中的數組具有編譯時固定大小。您不能有像string name[];這樣的聲明,因爲它會將大小留空。除非您提供確定大小的初始化列表,否則不能這樣做。

另外,數組類型參數被轉換爲指針參數。所以你的string h_name[]參數實際上是一個string* h_name

name[] = h_name[]; 

這條線沒什麼意義。這幾乎就像你試圖訪問nameh_name的元素而沒有給出索引。也許你是打算到h_name數組分配給name陣列,像這樣:

name = h_name; 

然而,正如我們剛纔所看到的,實際上h_name是一個指針。事實上,無論如何你都不能指定數組,所以即使h_name是一個數組,這仍然不起作用。

使用標準容器如std::vector會更好。看起來你想要動態調整大小的數組,所以這會使得這很容易。

0

即使已經選擇了答案,我想也許最初的問題可能被誤解了。

我想OP的意圖是每個星球實例應該有1個名字和1個星號;所以他在代碼中使用的數組符號是他對數組和字符串的誤解。基於這個假設,我會繼續。

當你聲明

string name[]; 

我相信你只想抱着1顆行星的名字,在這種情況下,你不需要和數組,你只需要一個字符串。 ie

string name; 

同樣的星星。

這會使代碼

Class planet: public body 
{ 
private: 
    string name; 
    string star; 
public: 
    void nameSetter (const string& h_name) 
    { 
     name = h_name; 
    } 
};