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