2013-04-22 1237 views
7

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

这是运营商的定义:

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

任何想法?

回答

10

不要忘记你的operator precedence规则。看来你想要的:

(*TempArray2)[i] 

否则,你的表达*TempArray2[i]被视为*(TempArray2[i]),我想你NumericArray<T>型不具备一元*运营商超载。

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