我想编写一个模板类,使数组具有重载乘法运算符。模板类的实际内部看起来很好,但是我对*运算符的重载有问题。我原来有一个重载操作符用于在常规类中乘数组,在这里我使用第一个重载操作符作为模板的基础。重载模板类数组中的乘法运算符
这是什么在我的头文件:
operator * (const Array<T>& a) const; //* operator
这是什么在我的主文件:
template <class T>
Array<T>::operator * (const Array<T>& a) const
{
if (num != a.num)
{
cout << "Error, arrays not equal!" << endl;
}
Array<int> tmp;
delete[] tmp.data;
tmp.data = new int[cap];
tmp.num = a.num;
tmp.cap = a.cap;
memcpy(tmp.data, a.data, sizeof(int)*num);
for(int i = 0 ; i < num ; i++)
{
tmp.data[i] = tmp.data[i] * a.data[i];
}
return tmp;
}
我收到了告诉我,什么是错与TMP的错误。它声明“错误:无法在函数结尾处将'Array'转换为'int'返回”参考“return tmp”。
我想乘两个阵列(a和c)在主()创建
Array <int> d = a * c;
有与阵列d错误消息,但这些也似乎植根于错误重载内部操作员功能。 tmp如何变成'int'?
我认为它实际上是做渎职的编译器,我认为标准禁止这种行为(C99确实太少,没有理由C++难道不),但不以此为理所当然 – Creris