Iza*_*aan 4 c++ size vector member
我有一个名为ChessBoard的类,其中一个成员变量是
std::vector<ChessPiece *> pieces(16);
Run Code Online (Sandbox Code Playgroud)
这给了我一个"预期的类型说明符"错误.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;
}
Run Code Online (Sandbox Code Playgroud)
jua*_*nza 10
就地初始化数据成员所需的语法不允许()与非成员共同的初始化语法.您可以使用以下语法:
std::vector<ChessPiece*> pieces = std::vector<ChessPiece*>(16);
Run Code Online (Sandbox Code Playgroud)
您不能在类声明中对成员变量调用方法。
在您的 cpp 文件中,您可以执行以下操作:
ChessBoard::ChessBoard() { pieces.resize(16); }
Run Code Online (Sandbox Code Playgroud)
或者:
ChessBoard::ChessBoard(): pieces(16) {}
Run Code Online (Sandbox Code Playgroud)
第二个调用带有大小参数的向量构造函数。或者您可以直接在 .h 文件中执行此操作:
class ChessBoard {
ChessBoard(): pieces(16) {} // version 1
ChessBoard(): pieces() { pieces.resize(16); } // version 2
private:
std::vector<ChessPiece *> pieces;
};
Run Code Online (Sandbox Code Playgroud)