friend und template
-
hola leute
folgendes problem
hab eine template class der ich eine template-funktion als friend eintrichtern will.
aber ich mach da scheinbar irgendwie was falsch.
folgender code:template <class K, class T> class DataTable { friend void AssignTableToVec(std::vector<T> &vec, const DataTable<K, T> &d); ... private: std::map<K, T> my_map; }; template<class K, class T> void AssignTableToVec(std::vector<T> &vec, const DataTable<K, T> &d) { ... if(d.my_map.size() == 0) // (1) ... }in zeile (1) meckert dann der comiler, das er auf my_map net zugreifen kann.
aufgerufen wirds folgendermassen:abe::AssignTableToVec<int, abe::ArtikelData>(artikel_db, Tag == FORM_ID_ZIPPO_ARTIKEL ? abe::databases::instance().zippo_db : abe::databases::instance().firma_db);sieht da einer den fehler ?
Meep Meep
-
Wo kommt das Objekt table her, und warum nimmst du nicht d?
grüße
-
dafür musst du eine Forward Deklaration machen:
http://www.ica1.uni-stuttgart.de/Courses_and_Lectures/C++/script/node23.html#SECTION00531000000000000000
-
re
@David_pb
muss naetuerlich d und nicht table heissen. hab da wohl beim tippen grad nix gedacht. im source stimmts aber schon.@phlox81
mit ner vorwaertsdeklaration meckert er genau so.scheinbar liegt der fehler wo anders.
Meep Meep
-
Vergleich doch mal den Beispielcode, den phlox verlinkt hat, mit deinem Quellcode

Die spitzen Klammern nach Funktionsnamen sind dabei nötig, um die Funktion als Template-Funktion kenntlich zu machen. In die spitzen Klammern hätte man noch T schreiben können, um anzudeuten, daß es sich um die Instantiierung für T handeln soll, was aber bereits aus dem zweiten Argument klar wird.
-
CStoll schrieb:
Vergleich doch mal den Beispielcode, den phlox verlinkt hat, mit deinem Quellcode

Die spitzen Klammern nach Funktionsnamen sind dabei nötig, um die Funktion als Template-Funktion kenntlich zu machen. In die spitzen Klammern hätte man noch T schreiben können, um anzudeuten, daß es sich um die Instantiierung für T handeln soll, was aber bereits aus dem zweiten Argument klar wird.
jups das wars. danke. kommt davon wenn man nur jede 3te zeile liest ;o)
Meep Meep