![](/img/trans.png)
[英]C++ compiler: 'class std::vector<std::vector<char> >' has no member named 'emplace_back'
[英]Adding a member to std::vector<std::vector<int>> class in C++
我必须修改代码,以便可以将成员添加到 2D 向量。 代码以typedef vector<vector<int>> Matrix
Matrix 开头,我将其替换为 Matrix class。 我尝试使用以下方法从vector<vector<int>>
继承:
class Matrix: public vector<vector<int>> {
public:
int myMember;
};
这样我实际上不必对源代码进行太多修改。 但是,如果我尝试运行:
Matrix mymatrix (4);
它引发了一个错误:
modele.cpp:19:20: error: no matching function for call to 'Matrix::Matrix(int)'
Matrix mymatrix (4);
^
In file included from modele.cpp:8:0:
modele.h:6:7: note: candidate: Matrix::Matrix()
class Matrix: public vector<vector<int>> {
^
modele.h:6:7: note: candidate expects 0 arguments, 1 provided
默认情况下,构造函数不会被继承,但可以在派生的 class 中使用它们,因为您必须执行以下操作:
#include <vector>
#include <iostream>
class Matrix : public std::vector<std::vector<int>>{
public:
using vector::vector;
int myMember;
};
int main(){
Matrix data(1);
std::vector row = {1,2,3,4,5};
data.push_back(row);
for(auto i: data){
for(auto r : i){
std::cout << r << std::endl;
}
}
}
这样编译器将知道基础 class 中的所有构造函数。 并将为您的派生 class 调用适当的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.