我一直在四處尋找解決這個問題的方法,而且我得到的最接近的是這個問題How do you initialize a map which takes a struct as value?,但它似乎沒有工作。 如果有人知道解決方案,那麼我很想知道,否則我會解決我的問題。我想創建一批棋子,爲此我創建了一個類「棋盤」和一個類「棋子」,這是所有棋子和騎士等繼承的超類。這是「ChessBoard.h」)試圖初始化映射,將一個對象作爲構造函數中的值
class ChessBoard {
protected:
map< vector<int>, Piece* > chess_pieces;
public:
ChessBoard();
};
現在我也有「海賊王」,這是「典當」的子類。我想分配一個Pawn類型的元素作爲chess_pieces之一。因此,棋盤構造函數中我有臺詞:
ChessBoard::ChessBoard()
{
/* Initialise white pieces */
/* First we set up the pawns: */
for (int j = 0; j < 8; j++) {
vector<int> v = {1, j};
chess_pieces[v] = new Pawn;
}
}
然而,編譯器給我一個警告,叫我在「新典當」的分配,說我是「分配抽象類類型的對象典當'。這是不允許的?我用默認的構造函數定義了Pawn類,而Piece類也有默認的構造函數。此外,我已確保在Pawn類聲明中包含行
class Pawn: public Piece {
。 如果有人知道如何做到這一點,我很想知道,謝謝你們的任何幫助可以給我!
Pawn是否提供了在Piece中聲明的所有純虛方法的實現? –
就是這樣!我忘了實施虛擬方法,感謝您的幫助! – user3023621