2016-03-15 220 views
2

我正在拼字遊戲項目。在這個項目中,我有一個瓦片類,它包含一個int值,用於字母的分數和遊戲中瓦片的數量。這是_tile類。我可以在另一個班級初始化班級嗎?

我的代碼中的另一個類是tile_pool類。它應該有26個字母和空白瓷磚的27個瓷磚類。不幸的是,當我編譯我的代碼時,我總是得到「錯誤:數字常量之前的預期標識符」。

class Tile { 
    int count; 
    int score; 
    public: 
    _tile(int , int); 
}; 

_tile::_tile(int _count = 0, int _score = 0): count(_count) , score(_score) { 
} 

class Pool{ 
    Tile A(9,1); 
    ... (the rest of the letters) 
}; 

我環顧四周,發現Initialize a class object inside the other class constructor 所以我嘗試做了名爲_TILE對象默認的構造函數,但並沒有改變錯誤。我還發現,當我把第14行放到我的主要功能中時,沒有任何問題。我還嘗試初始化Tile,然後使用set_values函數爲tile設置計數和分數,但這也不起作用。

void set_values(int _count, int _score) { 
    count = _count; 
    score = _score; 
} 

而在tile_pool功能:

返回的 「錯誤: 'A' 沒有指定類型」

我不明白爲什麼我不能初始化在我的tile_pool類中有一個Tile,但我可以在我的主類中。任何幫助表示讚賞!謝謝。

編輯:謝謝你的答案!我編輯了代碼以更好地遵循指導原則,並改變了我按照建議聲明我的課程的方式。我也改變了我的解決方案:

class Pool { 
    Tile a = Tile(9,1); 
}; 
+0

請發表[MCVE。沒有行號。 'typedef class _tile {...} Tile;'是一個C-ism,在C++中我們編寫'class Tile {...};'。 – Barry

回答

1

正確的語法是:

Tile A = Tile(9,1); 

Tile A{9, 1}; 

你可能想這是static const因爲你只需要爲所有的一個主瓷片類的實例。 (事實上​​這完全是一個糟糕的設計,但過一段時間後你會爲自己弄清楚)。


BTW typedef class...是作風不好,你應該只寫class Tile(或任何你想打電話給你的類)。沒有必要爲同一個班級設置兩個名字。另外,在類名中使用前導下劃線(_tile)是非常規的。

相關問題