template friend Funktion
-
Hallo,
ich habe in einer Template-Klasse eine friend Funktion. Die Funktion wollte ich aber der Übersichtlichkeit halten nicht in der Klasse definieren.
template<class T> class A { public: friend B& myFriend(B& b, A<T>& rhs); }; template<class T> B& myFriend(B& b, A<T>& rhs) { ... }Das Problem ist: Wenn ich die Funktion nicht in der Klasse definiere, sondern darunter, dann gibt mir der Linker einen Fehler, dass das Symbol nicht aufgelöst sei, wenn ich auf die Funktion zugreifen möchte:
myFriend(objektB, objektA); // LinkerfehlerDefiniere ich die Funktion hingegen direkt in der Klasse, funktioniert das ohne Probleme.
Meine Frage also:
Wie muss die Funktionssignatur außerhalb der Klasse aussehen, damit es keine Probleme gibt? Geht das überhaupt?(Das ganze befindet sich im Header, also der gängige cpp-Datei-Fehler-mit-Templates ist ausgeschlossen)
-
Hier stand Falsches (sorry).
-
Nexus schrieb:
Die Funktion muss vorher deklariert sein. Man spricht diesbezüglich vom Funktionsprototypen:
void funktion(int x); // Deklaration (Prototyp) template <typename T> class A { // Member }; void funktion(int x) // Definition { // Funktionsrumpf }Wenn du die Funktion mit dem Rumpf vor der Klasse aufschreibst, hast du eine gleichzeitige Deklaration und Definition.
Hat damit hier überhaupt nichts zu tun.
Hier steht die Erklärung zu deinem Problem: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16
-
Hier nochmal in deutsch

http://www.ica1.uni-stuttgart.de/Courses_and_Lectures/C++/script/node23.html#SECTION00531000000000000000
-
Vielen Dank
