我想在类的构造函数中初始化一个二维数组,但编译器给我这个错误“调用类类型的对象时没有适当的 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/