c++ - 在类的构造函数中初始化一个二维 vector

标签 c++ vector constructor initialization assign

我想在类的构造函数中初始化一个二维数组,但编译器给我这个错误“调用类类型的对象时没有适当的 operator() 或将函数转换为指向函数类型的指针”。

class Matrix
{

public:
    Matrix() {};
    Matrix(size_t x, size_t y) { a(x, vector<int>(y , 0 )); }
private:
    vector<vector<int>> a; 


};

最佳答案

首先,如前所述,这是:

Matrix(size_t x, size_t y)
{
   a(x, vector<int>(y , 0 ));
}

不是您初始化成员的方式。要初始化成员,我们使用成员初始化列表,如下所示:

Matrix(size_t x, size_t y)
   : a(x, vector<int>(y , 0 ))
{}

The colonic syntax是列出初始化的特定位置。构造函数体中没有任何东西是初始化。当您不为成员放置初始化程序时,它是默认初始化的。然后运行构造函数主体中的代码。正如我们所知,函数体由要执行的语句组成。

现在,当您执行语句 <name>(<thing>, <other thing>) 时,这是一个函数调用。如果<name>不是函数而是类实例,则函数调用运算符operator()而是查找。如果没有(或者它与参数不匹配),则编译将以您观察到的方式失败。

是否可以将语言设计为在构造函数体内以这种形式提及成员,并将其视为初始化?大概。但为什么?现在您将没有明确的方法来执行函数调用,而且构造过程中发生的事情的顺序也不清楚。现在好多了。

关于c++ - 在类的构造函数中初始化一个二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546343/

相关文章:

c++ - 构造函数中没有匹配的调用函数 - C++ 11

c++ - 为什么程序在 C++ 中迭代空 vector 时会抛出运行时错误

c++ - 如何初始化不同动态分配地址的 vector

c++ - 为什么我们不能像在 C++ 中输入数组那样输入 vector ?

python - 为什么 Python 不可变类型(如 int、str 或 tuple)需要使用 `__new__()` 而不仅仅是 `__init__()` ?

c++ - 在 C++ 源文件中包含 C++11 头文件

c++ - int *array = new int[n];这个函数实际上在做什么?

c++ - 由工厂构建的可以消失的对象的共享指针

c++ - 如何在不邀请 future 对象切片的情况下实现 ICloneable

c++ - 使用非平凡的构造函数初始化 union