无法指定矢量的初始大小

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)


Bri*_*ian 6

您不能在类声明中对成员变量调用方法。

在您的 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)