web-dev-qa-db-fra.com

Erreur C2100 - Indirection illégale

J'ai un programme très simple écrit pour définir un opérateur * dans une classe de modèle de tableau. Lorsque j'essaie de le compiler, il me donne une erreur "illégale indirection". Toute aide à ce sujet serait très appréciée!

C'est la définition de l'opérateur:

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

Et voici l’implémentation dans la fonction principale de test:

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

Des idées?

10
Byron

N'oubliez pas votre priorité de l'opérateur règles. Il semble que tu veuilles:

(*TempArray2)[i]

Sinon, votre expression *TempArray2[i] est considérée comme étant *(TempArray2[i]) et je suppose que votre type NumericArray<T> ne possède pas l'opérateur unary * surchargé.

12
Joseph Mansfield

Dans *TempArray2[i], le * est appliqué à TempArray[2] en raison des règles de priorité, et il est fort probable que les éléments du tableau n'aient pas d'opérateur unaire *.

Mais votre utilisation de l'allocation dynamique, puis du déréférencement pour revenir par valeur signifie que vous avez une fuite de mémoire.
(Vous n’avez pas besoin de new pour créer des objets en C++ - vous n’avez probablement pas besoin de l’utiliser dans main non plus.)

Ce serait mieux (et évite toute la question de l'indirection):

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