我正在做一个需要使用模板完成的作业:它是一个矩阵类。
其中一个告诉我重载operator ()(int r, int c);
,以便我可以使用obj(a, b);
访问我的数据,或者使用obj(a, b)=100;
进行更改。
我班级的模板是template<class T, int C, int R>;
然后我在公共范围内创建了我的课程a:
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>'
答案 0 :(得分:3)
该课程为
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;
}
答案 1 :(得分: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];
}