friend deklaration in Klassen Templates?
-
Halloechen, ich hab folgendes geschrieben:
template <class ValueImp> class Value : public ValueImp { // [...] friend Value<ValueImp> operator+(const Value<ValueImp>& lhs, const Value<ValueImp>& rhs); // usw. }; // implementation... template <class ValueImp> Value<ValueImp> operator+ (const Value<ValueImp>& lhs, const Value<ValueImp>& rhs) { Value<ValueImp> result(lhs); result+=rhs; return result;}Nun gibt mir der Compiler eine Warnung:
value.hpp:36: warning: friend declaration `Value<ValueImp> operator+(const Value<ValueImp>&, const Value<ValueImp>&)' declares a non-template functionSobald ich fuer eien Spezialisierung den operator+ bemuehen will, kommt vom compiler
In function `main': : undefined reference to `operator+(Value<IntValueImp> const&, Value<IntValueImp> const&)'Wie dekariere ich die friend definition richtig?
-
Hi,
diese Frage taucht in letzter Zeit ja immer häufiger aus.
Lösung: http://c-plusplus.net/forum/viewtopic-var-p-is-1293870.html#1293870
-
Naja, ne wirkliche Lösung für die Geschichte mit den Friend-Deklarationen hab ich dem zwar icht entnehmen können, aber ich hab den Hinweis bekommen, dass ich operator+ garnicht als Friend deklarieren muss, da er nur auf den (public) operator+= zugreift und auf keinerlei private members. Wundert mich nur, dass er mir da die Fehlermeldung rausgibt - vielleicht ein Fehler an anderer Stelle. Danke für den link
-
pumuckl schrieb:
Naja, ne wirkliche Lösung für die Geschichte mit den Friend-Deklarationen hab ich dem zwar icht entnehmen können, aber ich hab den Hinweis bekommen, dass ich operator+ garnicht als Friend deklarieren muss, da er nur auf den (public) operator+= zugreift und auf keinerlei private members. Wundert mich nur, dass er mir da die Fehlermeldung rausgibt - vielleicht ein Fehler an anderer Stelle. Danke für den link
Die Lösung steht im Link ;), verfolge den Link in meinem Link, dann kommt ne genauere Antwort darauf ...