使用模板重载运算符 ()
Overload operator () with templates
我正在做一个需要使用模板完成的作业:这是一个矩阵类。
其中一个告诉我重载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>'
该类
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;
}
如果我
理解正确,您缺少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];
}
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板