我有一个名为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;
}
答案 0 :(得分:10)
数据成员的就地初始化所需的语法不允许与非成员共同的()
初始化语法。您可以改用此语法:
std::vector<ChessPiece*> pieces = std::vector<ChessPiece*>(16);
答案 1 :(得分:3)
您不能在类声明中的成员变量上调用方法。
在您的cpp文件中,您可以执行以下操作:
ChessBoard::ChessBoard() { pieces.resize(16); }
或:
ChessBoard::ChessBoard(): pieces(16) {}
第二个调用带有size参数的向量构造函数。或者您可以直接在.h文件中执行此操作:
class ChessBoard {
ChessBoard(): pieces(16) {} // version 1
ChessBoard(): pieces() { pieces.resize(16); } // version 2
private:
std::vector<ChessPiece *> pieces;
};