2016-02-15 63 views
2

我已經寫了自定義子類:的std ::向量沒有可行的重載運算符[]自定義類

template <class T> 
class CustVec : public vector<vector<T>> { 

public: 

    T& operator [](const pair<int, int> pos) { 
     return (*this)[pos.first][pos.second]; 
    } 
}; 

但我有一個錯誤No viable overloaded operator[] for type 'CustVec<pair<int, int>>'」如何修復

+0

你用什麼編譯器將其公開訪問? – Valentin

+5

不要從標準容器繼承。相反,使用組合。 – crashmstr

+0

問題是'(* this)[pos.first]'看起來像遞歸調用,但是參數錯誤。 –

回答

3

?你被宣佈了新的運營商再通過

明確導入的名稱隱藏的基類 operator[]。像往常一樣,這個隱藏外部範圍相似的名稱。

你可以把它可見

using vector<vector<T>>::operator[]; 

或許將在私營部分,爲了不使

template <class T> 
class CustVec : public vector<vector<T>> { 

    using vector<vector<T>>::operator[]; 

public: 

    T& operator [](const pair<int, int> pos) { 
     return (*this)[pos.first][pos.second]; 
    } 
}; 
+0

謝謝,這工作! –

相關問題