14

我编写了一个非常简单的程序,用于在数组模板类中定义 * 运算符。当我尝试编译时,它给了我一个错误“非法间接”。任何有关此事的帮助将不胜感激!

这是运算符定义:

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);

有任何想法吗?

4

2 回答 2

16

不要忘记您的运算符优先级规则。看来你想要:

(*TempArray2)[i]

否则你的表达式*TempArray2[i]被认为是*(TempArray2[i]),我想你的NumericArray<T>类型没有重载一元运算符。 *

于 2013-04-22T12:34:04.900 回答
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;
}
于 2013-04-22T13:06:33.240 回答