2012-11-26 64 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]; 
}