2012-11-26 62 views
2

我正在做一個需要使用模板完成的作業:它是一個矩陣類。帶模板的重載操作符()

其中一個告訴我超載operator()(int r, int c);,所以我可以使用obj(a, b);訪問我的數據或使用obj(a, b)=100;更改它。

我的類模板是template<class T, int C, int R>; 後來我在公衆範圍我類中創建:

T& operator()(int r, int c);//LINE 16 

實現較爲簡單。

我在兩個方面嘗試:

template <class T> 
T& Matrix::operator()(int r, int c){ 
    return matrixData[r][c]; 
} 

template <class T, int C, int R> 
T& Matrix::operator()(int r, int c){ 
    return matrixData[r][c]; 
} 

在最後一個我得到的錯誤,告訴我:

16: Error: expected type-specifier before '(' token 

線16的上方是一個解說的錯誤:

no 'T& Matrix<T, C, R>::operator()(int, int)' member function declared in class 'Matrix<T, C, R>' 

回答

3

The class is template<class T, int C, int R> class Matrix {...} :

以下對我而適用:

#include <iostream> 

template<typename T, int R, int C> 
class Matrix { 
    T data[R][C]; 
public: 
    T& operator()(int r, int c); 
}; 

template <typename T, int R, int C> 
T& Matrix<T, R, C>::operator()(int r, int c) { 
    return data[r][c]; 
} 

int main() { 
    Matrix<int, 3, 4> m; 
    m(0, 1) = 42; 
    std::cout << m(0, 1) << std::endl; 
} 
+0

它說: 錯誤的參數數量。 我創建了一些朋友操作員,他們工作得很好,但現在我無法解決這個問題。 – Lefsler

+0

@demonofnight:我編輯的答案中的代碼適合我編譯。 – NPE

+0

如果我只保留類T它不工作,看來我需要把。 它告訴我,參數的數量應該是3而不是1. 該類是模板 class Matrix {...} 如果我使用所有3個參數修復該問題,我的主要告訴我,我有一個未定義的參考矩陣 :: operator()(int,int) – Lefsler

1

如果我理解正確的話,你就會錯失類型上Matrix

template <class T> 
T& Matrix<T>::operator()(int r, int c){ 
    return matrixData[r][c]; 
} 

template <class T, int C, int R> 
T& Matrix<T>::operator()(int r, int c){ 
    return matrixData[r][c]; 
}