[Fehler] this-Zeiger konnte nicht konvertiert werden
-
Hallo.
Ich habe folgende Elementfunktion:T& at(std::size_t column, std::size_t line) throw(std::out_of_range);
Wenn ich diese Funktion in einer anderen Elementfunktion aufrufe, z.B.:
template <class T> void Array_2D<T>::show() const { for(std::size_t l=0; l<get_lines(); ++l) { for(std::size_t c=0; c<get_columns(); ++c) std::cout << at(c, l); std::cout << std::endl; } }
dann bekomme ich für die Zeile mit dem
std::cout << at(c, l);
folgenden Fehler:
error C2662: 'Array_2D<T>::at': this-Zeiger kann nicht von 'const Array_2D<T>' in 'Array_2D<T> &' konvertiert werden
Ich bin absolut ratlos und kann den Fehler nicht finden ....
Ihr vielleicht?
-
Hi!
Kannst du mal die ganze at-Routine zeigen?
Code-Hacker
-
Neeee. :p
Bin selber gerade Draufgekommen.
ich werde alt und senil.
-
Da die Methode const ist, hast du einen konstanten this-Zeiger. Jetzt versuchst du mit diesem konstanten this Zeiger auf eine nicht konstante Methode (at ist nicht const) zuzugreifen -> das geht nicht.
-
Stimmt, jetzt weis ich auch. Aber glaubst du daran denkt man wenn man es braucht?
Habe jetzt aber schon das nächste Problem.
Bekomme bei einem überladenen operator<< einen linkerfehler.friend std::ostream& operator<<(std::ostream& stream, const Array_2D<T>& array);
template <class T> std::ostream& operator<<(std::ostream& stream, const Array_2D<T>& array) { for(std::size_t l=0; l<array.get_lines(); ++l) { for(std::size_t c=0; c<array.get_columns(); ++c) stream << array.at(c, l); stream << std::endl; } return stream; }
Aufruf:
Array_2D<float> arr(5, 5); // ... std::cout << arr;
Hmmmmm
-
Jover schrieb:
Stimmt, jetzt weis ich auch. Aber glaubst du daran denkt man wenn man es braucht?
Habe jetzt aber schon das nächste Problem.
Bekomme bei einem überladenen operator<< einen linkerfehler.Und der lautet?
-
T& at(std::size_t column, std::size_t line) throw(std::out_of_range);
Und du bist sicher, dass T keine Exception wirft? Davon kann man bei Templates eigentlich nie ausgehen.
-
Jover schrieb:
Bekomme bei einem überladenen operator<< einen linkerfehler.
Ich hoffe, du hast die Funktion nicht in einer ÜE definiert, sondern im Header. Da du keinen Compilerfehler hast und das inline vor der Funktion fehlt, gehe ich einfach mal davon aus.
-
Klar hab ich sie im Header stehen.
-
Tja, dann hast du wohl das inline vergessen.