2013-04-22 5 views
7

Ich habe ein sehr einfaches Programm geschrieben, um einen * Operator in einer Array-Vorlage-Klasse zu definieren. Wenn ich versuche zu kompilieren, gibt es mir einen Fehler "illegale Indirektion". Jede Hilfe in dieser Angelegenheit würde sehr geschätzt werden!Fehler C2100 - Illegale Indirection

Dies ist der Betreiber 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; 
} 

Und das ist die Umsetzung in der Testhauptfunktion:

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

Irgendwelche Ideen?

Antwort

10

Vergessen Sie nicht Ihre operator precedence Regeln. Es scheint, dass Sie wollen:

(*TempArray2)[i] 

Andernfalls wird Ihr Ausdruck *TempArray2[i] wird als *(TempArray2[i]) und ich nehme Ihre NumericArray<T> Typ nicht über die einstellige* Betreiber überlastet.

1

In *TempArray2[i] wird die * wegen der Vorrangregeln zu TempArray[2] angewendet, und es gibt eine gute Chance, dass die Array-Elemente keine monadische * Betreiber haben.

Aber Ihre Verwendung von dynamischer Zuordnung und Dereferenzierung, um durch Wert zurückzukehren, bedeutet, dass Sie einen Speicherverlust haben.
(Sie nicht new müssen Objekte in C++ erstellen - Sie wahrscheinlich müssen sie auch nicht in main verwenden.)

Dies wäre besser (und vermeidet die ganze indirection Ausgabe):

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