【问题标题】:Error C2100 - Illegal Indirection错误 C2100 - 非法间接
【发布时间】:2013-04-15 08:40:25
【问题描述】:

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

这是运算符定义:

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

有什么想法吗?

【问题讨论】:

    标签: c++ arrays templates compiler-errors


    【解决方案1】:

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

    (*TempArray2)[i]
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        相关资源
        最近更新 更多