在类的构造函数中初始化 2D 向量
Initialize a 2D vector inside constructor of class
我想在类的构造函数中初始化一个 2D 数组,但编译器给了我这个错误"调用没有适当运算符() 或将函数转换为指针到函数类型的类类型的对象"。
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 ))
{}
结肠语法是列出初始化的特定位置。构造函数主体中的任何内容都不是初始化。如果不为成员放置初始化器,则默认初始化。然后运行构造函数主体中的代码。众所周知,函数的主体由执行的语句组成。
现在,当您执行语句<name>(<thing>, <other thing>)
时,这是一个函数调用。如果<name>
不是函数而是类实例,则改为查找函数调用运算符operator()
。如果没有(或者它与参数不匹配),则编译会以您观察到的方式失败。
语言是否可以设计成以这种形式在构造函数主体内提及成员的任何内容都被视为初始化?可能。但是为什么?现在,您将没有明确的方式来执行函数调用,并且构造过程中事情发生的顺序将不清楚。现在这样好多了。
正确的语法是使用初始值设定项列表:
Matrix(size_t x, size_t y) :a(x, vector<int>(y , 0 )) { }
当控件传递给构造函数的主体时,已经创建了向量。
所以这个说法
a(x, vector<int>(y , 0 ));
不是对向量构造函数的调用。矢量已使用默认构造函数创建,并且上面的语句无效。
您可以在构造函数中使用 mem 初始值设定项列表
class Matrix
{
public:
Matrix() {};
Matrix(size_t x, size_t y) : a(x, vector<int>(y ) ) {}
private:
vector<vector<int>> a;
};
或者,您可以使用构造函数主体中assign
的成员函数
class Matrix
{
public:
Matrix() {};
Matrix(size_t x, size_t y) { a.assign (x, vector<int>(y ) ); }
private:
vector<vector<int>> a;
};
相关文章:
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- 如何从initializer_list初始化 2D 数组
- 如何从文件中读取值,然后使用它们来初始化 2D 数组C++
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?
- 从另一个类C++的构造函数初始化 2D 数组
- 在构造函数中初始化 2D 数组
- 如何初始化2D向量C
- 在类的构造函数中初始化 2D 向量
- 初始化2D矢量
- 无法解决动态初始化 2D 数组的问题
- 使用随机值初始化 2D 向量
- 使用多个std ::数组初始化2D std ::数组
- 如何使用初始值设定项列表初始化 2D 向量成员
- 如何在标头中声明后初始化 2D 字符数组
- 无法在我的C++课中初始化 2d 矢量
- 如何在 c++ 中使用构造函数初始化 2d 向量
- 我正在尝试创建一个函数来初始化 2D 数组C++
- 用于初始化 2D std::array 成员的初始值设定项列表
- 在c++中使用1 d数组初始化2d数组