簡體   English   中英

重載 operator[] 不斷拋出運行時錯誤

[英]Overloading operator[] keeps throwing a runtime error

好吧,所以我正在嘗試創建一個 Matrix 類,我真的,真的,希望能夠通過使用括號調用元素。 以 mMatrix[x][y] 的風格。

所以我有一個vector<vector<T>>成員,當重載 [] 運算符時,我返回對vector<T>對象的引用。

template<class T>
class Matrix
{
private:
    uint32_t DimensionHorizontal;
    uint32_t DimensionVertical;

    std::vector<std::vector<T>> matrix;

public:
    Matrix()
    {
        DimensionHorizontal = 10;
        DimensionVertical = 10;
    }

    std::vector<T>& operator[] (int index)
    {
        return matrix.[index];

    }

    Matrix(int x, int y)
    {
        DimensionHorizontal = x;
        DimensionVertical = y;
    }
};

這似乎可行,因為當我創建一個 Matrix 對象,並嘗試通過執行 Matrix[a][n](在本例中使用整數)添加一個元素時,它編譯沒有問題。 我后來嘗試用 cout 打印出存儲在那里的值。

在運行時,我收到以下錯誤

表達式:向量第 1455 行的向量下標超出范圍。 在第 1455 行:

_NODISCARD size_type capacity() const noexcept { // return current length of allocated storage
        auto& _My_data = _Mypair._Myval2;
        return static_cast<size_type>(_My_data._Myend - _My_data._Myfirst);
    }

    _NODISCARD _Ty& operator[](const size_type _Pos) noexcept { // strengthened
        auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
        _STL_VERIFY(
            _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0

        return _My_data._Myfirst[_Pos];
    }

我對為什么會這樣感到困惑。 我知道我正在嘗試越界訪問某些東西,或者做一些非法的事情,但是 Matrix[] 應該返回一個向量,我應該能夠再次使用 [] 來訪問元素 T(在本例中為 int),任何幫助,將不勝感激。

編輯:

這就是我使用課程的方式

int main()
{
    Matrix<int> a(10, 10);
    a[0][0] = 10;
    std::cout << a[0][0];
    return 0;
}

您需要在構造函數中調整矩陣的大小以匹配作為參數傳遞的大小。

 Matrix(int x, int y) : matrix(x)
 {
    for( auto& sub : matrix ) {
       sub.resize(y);
    }
    DimensionHorizontal = x;
    DimensionVertical = y;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM