在 C++17 中初始化整数向量的向量

Jac*_*nte 3 c++ stdvector c++17

我尝试使用以下线程中的解决方案在具有固定大小的类中创建向量向量,但无济于事。使用 boost 分配初始化具有固定大小的向量的向量

由于它已有 7 年历史,我认为这可能与 C++17 的变化有关,但我不确定问题出在哪里。IDE 告诉我的错误是第一个参数上的“预期类型说明符”。查看构造函数的文档,似乎没有什么问题,除非我错过了一些东西。

class SudokuSolver {

public:
    SudokuSolver() {}

    ~SudokuSolver() {}

private:
    std::vector<std::vector<int>> sudoku_field(9, std::vector<int>(9, 0));
};
Run Code Online (Sandbox Code Playgroud)

sco*_*001 5

您可以使用花括号让编译器知道您正在尝试调用构造函数:

std::vector<std::vector<int>> sudoku_field{9, std::vector<int>(9, 0)};
Run Code Online (Sandbox Code Playgroud)

或者,您可以在默认构造函数的初始化列表中执行此工作:

SudokuSolver() : sudoku_field(9, std::vector<int>(9, 0)) {}
Run Code Online (Sandbox Code Playgroud)

然后从您创建的每个新构造函数中运行您的默认构造函数以确保设置:

SudokuSolver(int thing) : SudokuSolver() { }
Run Code Online (Sandbox Code Playgroud)

  • 这在这种情况下有效,但使用该表示法对于“std::vector”来说是有风险的,因为它会尽最大努力将其解释为元素列表。如果无法将其解释为元素列表,它只会使用另一个构造函数。 (5认同)