【发布时间】:2014-01-16 17:23:33
【问题描述】:
我在尝试从父结构继承函数调用运算符时遇到问题。我创建了一个简单的代码来说明我的问题:
#include <iostream>
using namespace std;
template <class T, int N>
struct array
{
T value[N];
T& operator() (int);
};
template <class T, int N>
T& array<T,N>::operator() (int i)
{ return value[i]; }
template <class T, int N>
struct matrix: public array<T,N*N>
{
T& operator() (int,int);
};
template <class T, int N>
T& matrix<T,N>::operator() (int i, int j)
{ return this->value[i*N+j]; }
int main()
{
matrix<double,100> a;
a(0) = 3.5;
cout << a(0) << endl;
return 0;
};
我希望'matrix'类从'array'类继承operator(),并用本地operator()重载它;我希望这是因为参数的数量不同。但是,此代码的编译失败并显示诸如“错误:不匹配调用‘(matrix) (int)’”和“注意:候选人需要 2 个参数,提供 1 个”之类的消息。如果 operator() 没有在类 'matrix' 中定义,则继承正常发生,代码编译并运行良好,如预期的那样。
我做错了什么?我不想不必要地重新定义 operator() ...
【问题讨论】:
标签: c++ inheritance operator-overloading