无法指定矢量的初始大小

时间:2014-07-15 21:13:58

标签: c++ vector size member

我有一个名为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;
}

2 个答案:

答案 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;
};