Funktions-Template in Template-Klasse (Template-Member)
-
Hallo,
neues Glück, neues Problem:
Ich wollte folgendes Klassen-template erstellen:template<typename T> class SampleClass { public: template<typename U> int SampleFunction(U T::*, int, char); };//end of SampleClassich definiere es, nach http://msdn.microsoft.com/en-us/library/80dx1bas.aspx Beispiel 3 folgendermaßen:
template<typename T> template <typename U> int SampleClass<T>::SampleFunction (U T::* ptm_source,int i, char c) {...}und versuche das ganz zu verwenden:
class CTestclass{public: int a,b,c;}; SampleClass<CTestclass> x; x.SampleFunction(&CTestclass::b, 0, 0);Dabei erhalte ich folgende Fehlermeldungen:
[dateipfad...] error C2039: 'MEMBER': Ist kein Element von 'CTestclass'
[dateipfad..] Siehe Deklaration von 'CTestclass'
[dateipfad...] Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "int SampleClass<T>::SampleFunction<int>(U CTestclass::* ,int,char)".
with
[
T=CTestclass,
U=int
]Kann mir bitte jemand helfen, wo mein Problem liegt?
-
Vermutlich ist es dein Compiler. GCC (4.4) und MSVC (2005) compilieren es bei mir ohne Murren. Welchen Compiler verwendest du?
G.
-
hallo,
ich verwende den aktuellen Mcrosoft-Compiler in der MS Visual Studio 2010 IDE. Wenn das bei dir kompiliert, schau ich nochmal drüber, auch wenn ich das schonoft getan habe und auch nen guten bekanntn habe machen lassen.
-
Was ist
MEMBER? Ich sehe nichts dergleichen in deinem Code. Ist das Beispiel unvollständig?
-
Oh, Entschuldigung:
MEMBER habe ich hier der Einfachkeit halber durch U ersetzt. In der Fehlermeldung habe ich das vergessen, tut mir Leid.
-
Kannst du ein vollständiges, bis auf den einen Fehler kompilierbares Minimalprogramm posten, welches dein Problem immer noch repräsentiert?
-
Hallo,
es tut mir Leid, ich hätte vorher länger suchen müssen. Das Problem lag innerhalb der Funktion, nicht im der Definitionskopf (wenn man das so sagen darf). Ich habe mich da von der Fehlermeldung ein wenig in die Irre führen lassen.
Das Thema hier kann beendet werden. Danke trotzdem allen, die versucht haben mir zu helfen!