我编写了一个非常简单的程序来定义数组模板类中的*运算符。 当我尝试编译它给我一个错误“非法间接”。 任何有关此事的帮助将不胜感激!
这是运营商的定义:
template <typename T>
NumericArray<T> NumericArray<T>::operator * (const int factor) const
{
NumericArray<T>* TempArray2 = new NumericArray<T>(Size());
for (int i=0; i<Size(); i++)
{
*TempArray2[i] = ((GetElement(i))*(factor));
}
return *TempArray2;
}
这是测试主函数中的实现:
cout<<((*intArray1)*5).GetElement(0);
cout<<((*intArray1)*5).GetElement(1);
cout<<((*intArray1)*5).GetElement(2);
有什么想法吗?
答案 0 :(得分:13)
不要忘记您的operator precedence规则。看来你想要:
(*TempArray2)[i]
否则您的表达式*TempArray2[i]
被视为*(TempArray2[i])
,我认为您的NumericArray<T>
类型没有重载一元 *
运算符。
答案 1 :(得分:1)
在*TempArray2[i]
中,由于优先规则,*
已应用于TempArray[2]
,并且数组元素很可能没有一元*
操作
但您使用动态分配然后取消引用以按值返回意味着您有内存泄漏。
(您不需要new
在C ++中创建对象 - 您可能也不需要在main
中使用它。)
这会更好(并避免整个间接问题):
template <typename T>
NumericArray<T> NumericArray<T>::operator * (int factor) const
{
NumericArray<T> TempArray(Size());
for (int i = 0; i < Size(); i++)
{
TempArray[i] = GetElement(i) * factor;
}
return TempArray;
}