Errore C2100 – Illegale Riferimento Indiretto

Ho un programma molto semplice scritto per definire un operatore * in un array di classe modello.
Quando provo a compilare mi da un errore “illegal riferimento indiretto”.
Qualsiasi aiuto sulla questione sarebbe molto apprezzato!

Questa è la definizione dell’operatore:

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

E questo è l’implementazione del test di funzione principale:

cout<<((*intArray1)*5).GetElement(0);                                   
cout<<((*intArray1)*5).GetElement(1);
cout<<((*intArray1)*5).GetElement(2);

Tutte le idee?

InformationsquelleAutor Byron | 2013-04-22

 

2 Replies
  1. 13

    Non dimenticate il vostro precedenza degli operatori regole. Sembra che tu voglia:

    (*TempArray2)[i]

    Altrimenti la tua espressione *TempArray2[i] è considerato come *(TempArray2[i]) e suppongo che il tuo NumericArray<T> tipo non ha la unario * operatore sovraccarico.

  2. 1

    In *TempArray2[i], il * è applicato a TempArray[2] a causa delle regole di precedenza, e c’è una buona probabilità che gli elementi della matrice non sono unario * operatore.

    Ma uso di allocazione dinamica e quindi la risoluzione dei riferimenti per restituire un valore, significa che si ha una perdita di memoria.

    (Non c’è bisogno new per creare oggetti in C++ – probabilmente non c’è bisogno di utilizzare in main sia).

    Questo sarebbe meglio (e si evita tutto il riferimento indiretto al problema):

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

Lascia un commento