Error C2100 - Illegal Indirection
Habe ich ein sehr einfaches Programm geschrieben, um zu definieren, ein operator * in ein array template-Klasse.
Wenn ich versuche zu kompilieren, es gibt mir eine Fehlermeldung "illegal indirection".
Jede Hilfe in der Angelegenheit würde sehr geschätzt werden!
Dies ist der operator definition:
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;
}
Ist und diese Umsetzung in der test-main-Funktion:
cout<<((*intArray1)*5).GetElement(0);
cout<<((*intArray1)*5).GetElement(1);
cout<<((*intArray1)*5).GetElement(2);
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vergessen Sie nicht, Ihre operator-Rangfolge Regeln. Es scheint, dass Sie wollen:
Sonst Ihren Ausdruck
*TempArray2[i]
als*(TempArray2[i])
und ich vermute, dass IhrNumericArray<T>
geben nicht die unäre*
- operator überladen.In
*TempArray2[i]
, die*
angewendet wirdTempArray[2]
aufgrund der Vorrang-Regeln, und es gibt eine faire chance, dass die array-Elemente nicht haben unäre*
Betreiber.Aber Ihre Nutzung der dynamischen Zuordnung und dann die Dereferenzierung Rückkehr nach Wert bedeutet, dass Sie einen Speicherverlust haben.
(Sie brauchen nicht
new
zum erstellen von Objekten in C++ - Sie wahrscheinlich nicht brauchen, um es inmain
entweder.)Besser wäre (und vermeidet die ganze Dereferenzierung Ausgabe):