2014-07-15 91 views
3

的初始大小我有一個類叫器ChessBoard和成員變量之一是無法指定矢量

std::vector<ChessPiece *> pieces(16); 

這是給我一個「預期類型說明符」的錯誤。 ChessPiece的默認構造函數是私有的。但是,如果我在函數內部寫入相同的語句,它可以很好地工作(即初始大小爲16)。爲什麼當我嘗試指定成員變量的初始大小時報告錯誤?謝謝!

SSCCE:

class ChessPiece { 

    ChessPiece(); 

public: 
    ChessPiece(int value) { std::cout << value << std::endl; } 
}; 

class ChessBoard { 

    ChessBoard(); 
    std::vector<ChessPiece *> pieces(16); // Error: expected a type specifier 

public: 
    ChessBoard(int value) { std::cout << value << std::endl; } 
}; 

int main(int argc, char*argv[]) { 

    std::vector<ChessPiece *> pieces(16); 
    std::cout << pieces.size() << std::endl; // prints 16 
    std::cin.get(); 
    return 0; 
} 

回答

7

就地初始化數據成員不允許()初始化語法普通與非成員所要求的語法。您可以使用以下語法代替:

std::vector<ChessPiece*> pieces = std::vector<ChessPiece*>(16); 
3

你不能叫上你的類聲明中的成員變量的方法。

在你的CPP文件,你可以這樣做:

ChessBoard::ChessBoard() { pieces.resize(16); } 

或:

ChessBoard::ChessBoard(): pieces(16) {} 

第二個呼叫向量構造函數的尺寸參數。或者你也可以直接做在您的.h文件中:

class ChessBoard { 
    ChessBoard(): pieces(16) {} // version 1 
    ChessBoard(): pieces() { pieces.resize(16); } // version 2 

private: 
    std::vector<ChessPiece *> pieces; 
}; 
+0

您的第一個'ChessBoard'構造函數看起來不正確。也許你的意思是'ChessBoard():件(16){}'? – juanchopanza

+0

@juanchopanza:呃,固定。謝謝 – Brian

+0

我可能是錯的,但不會因爲默認的構造函數無法訪問而導致pieces.resize(16)拋出一個錯誤? – Izaan