我必須修改一個代碼,以便我可以向 2D 向量添加一個成員。代碼以 a 開頭typedef vector<vector<int>> Matrix,我將其替換為 Matrix 類。我試圖從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
uj5u.com熱心網友回復:
建構式默認不繼承,但可以在派生類中使用它們,因為您必須執行以下操作:
#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;
}
}
}
這樣編譯器就會知道基類的所有建構式。并將為您的派生類呼叫適當的建構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366724.html
上一篇:為什么不呼叫移動建構式?[復制]
