【发布时间】:2016-11-11 23:33:32
【问题描述】:
我正在尝试编写一个模板类来制作具有重载乘法运算符的数组。模板类的实际内部看起来很好,但是我遇到了 * 运算符的重载问题。我最初有一个重载运算符用于将常规类中的数组相乘,这里我使用第一个重载运算符作为模板的基础。
这是我的头文件中的内容:
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 有问题。它在函数末尾引用“return tmp”时指出“错误:无法将'Array'转换为'int'作为回报”。
我正在尝试将 main() 中创建的两个数组(a 和 c)相乘
Array <int> d = a * c;
存在与数组 d 相关的错误消息,但这些似乎也源于重载运算符函数内部的错误。 tmp 是如何变成 'int' 的?
【问题讨论】:
标签: c++