我有一個類存儲從通用ListAsArray類繼承的向量,但是當我嘗試創建由這些向量類組成的矩陣時,我得到了分段錯誤。我的問題的一個通用示例如下:設置2D矩陣時避免出現分段錯誤
#include <iostream>
#include <vector>
using namespace std;
class ListAsArray
{
public:
virtual void addToEnd(int i) = 0;
virtual int operator[](int i) = 0;
};
class ListAsVector : public ListAsArray
{
public:
void addToEnd(int i)
{
vec.push_back(i);
}
int operator[](int i)
{
return vec[i];
}
private:
vector<int> vec;
};
class FixedSizeMatrix
{
public:
FixedSizeMatrix(int rows, int columns)
{
int count = 0;
this->rows = rows;
this->columns = columns;
matrix = new ListAsVector[rows];
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
matrix[i].addToEnd(count++);
}
}
}
ListAsArray& operator[](int i)
{
return matrix[i];
}
private:
ListAsArray* matrix;
int rows;
int columns;
};
int main() {
FixedSizeMatrix m(1,2);
cout<<m[0][0]<<endl;
return 0;
}
只有當我嘗試創建一個多行的矩陣時纔會出現此問題。當我將矩陣的類型從ListAsArray *更改爲ListAsVector *時,問題就消失了,因此需要某種類型的強制類型轉換,但我嘗試了幾乎所有的操作,但都沒有成功。
因爲這是一項任務,我不得不擁有ListAsArray *類型的矩陣。
非常感謝您的幫助。
你[切片](https://stackoverflow.com/questions/274626/what-is-object-slicing)你的對象序列.'matrix [i]'表示爲'ListAsArray' * object *,不是指向某個「ListAsVector」對象的引用或指針。因此,只有第一個位於適當的邊界上。 – WhozCraig
@WhozCraig那麼我該如何解決這個問題呢? – Keagansed
@WhozCraig如果我將它更改爲ListAsArray **矩陣;並將初始化更改爲matrix = new ListAsVector * [rows];我得到一個錯誤,說:從'ListAsVector **'無效轉換爲'ListAsArray **' – Keagansed