C++中继承std::vector<std::vector<int>>实现Matrix类构造调用报错如何解决?
问题原因
C++的派生类默认不会继承基类的构造函数。你自定义的Matrix类继承了vector<vector<int>>,但没有显式定义接受整型参数的构造函数,因此编译器只会为Matrix生成默认无参构造、拷贝构造等默认构造函数,传入4初始化时找不到匹配的构造函数,因此报错。
解决方法
有两种常用的解决方案,你可以根据自己的需求选择:
方案1:继承基类的全部构造函数
如果你不需要额外对自定义成员myMember做初始化,直接在类的public区域添加using声明继承基类所有构造函数即可,修改后的类定义如下:class Matrix: public vector<vector<int>> { public: using vector<vector<int>>::vector; // 继承基类所有构造函数 int myMember; };这种方式改动最小,原有所有基于
vector<vector<int>>的初始化代码都可以直接复用。方案2:显式定义需要的构造函数
如果你需要同时初始化自定义的成员变量,避免myMember出现未初始化的问题,可以显式定义匹配参数的构造函数,主动调用基类构造:class Matrix: public vector<vector<int>> { public: // 显式定义接受整型参数的构造,调用基类构造同时初始化自定义成员 Matrix(int size) : vector<vector<int>>(size), myMember(0) {} // 如果需要保留其他构造函数(比如无参、拷贝等),也可以按需补充定义 Matrix() = default; Matrix(const Matrix&) = default; int myMember; };
注意:STL标准容器本身不是为继承设计的,没有虚析构函数,如果你没有使用基类指针指向派生类对象做多态调用、释放的场景,上述用法是安全的,适合替换原有typedef的场景最小化改造成本。
内容的提问来源于stack exchange,提问作者Redwane Hammas
相关产品推荐
相关产品推荐

