Jens Holzkämper: (C++) Index-Operator überladen in Klassentemplate

Beitrag lesen

Tach,

für meine Hausaufgabe soll ich quasi Teile der Vektor-Klasse als Klassentemplate in C++ neu implementieren, Probleme macht mir momentan das Überladen des Index-Operators []. Der (gekürzte) Quelltext sieht wie folgt aus:

  
template<typename T> class Vector  
{  
private:  
 unsigned int length;  
 T* daten;  
  
 unsigned int getLength(){return this->length;}  
 T* getDaten(){return this->daten;}  
 void setDaten(T* daten){this->daten=daten;}  
  
public:  
 Vector(void){  
  this->setLength(0);  
  this->setCapacity(100);  
  daten = new T[100];  
 }  
 ~Vector(void){  
  delete daten;  
 }  
  
 void push_back(T element);  
 T& operator[](unsigned int position){return this->getDaten()[position];}//funktioniert nicht  
 T& out(unsigned int position){return this->getDaten()[position];}//funktioniert  
 unsigned int size(){return getLength();}  
};  
  
template <typename T> void Vector<typename T>::push_back(T element){  
 daten=this->getDaten();  
 daten[this->getLength()]=element;  
 this->setDaten(daten);  
}  
  
void main(){  
 Vector<int>* erwin = new Vector<int>;  
 erwin->push_back(12345);  
 erwin->push_back(678);  
 int a = erwin->out(1);  
 int b = erwin[1];  
}  

Beim Kompilieren (Visual Studio .Net 2003) wird die vorletzte Zeile (int b = erwin[1];) angekreidet und ich erhalte die Fehlermeldung "error C2440: 'initializing' : cannot convert from 'Vector<T>' to 'int' with [ T=int ]". Da die testweise eingebaute Methode out funktioniert, vermute ich, dass meine Operator-Definition komplett übergangen wird. Leider habe ich im Moment nicht den blassesten Schimmer wieso.

mfg
Woodfighter