template ID passt zu keiner Templatedeklaration
-
Hallo,
ich versuche sowas:
template <class T> class A { //in einer template funktion: void fkt() { B<T> o_b; o_b.my_function(); } };template <class T> class B { void my_function(); }; //und in der .cpp de template klasse !!! das hier: template<> void B<double>::my_function() { //do_something }aus der main rufe ich so auf:
A<double> o_a; o_a.fkt();ich bekomme folgenden fehler:
Template-ID »my_function<>« für »void B<double>::my_function()« passt zu keiner Templatedeklaration Fehler: ungültige Funktionsdeklarationdie funktion my_function() soll eine typ-spezielle funktion sein - d.h sie soll nur für double werte gelten ...das soll also so sein und nicht für jedes template
komischerweise funktioniert es das template über eine ecke weiterzugeben - über 2 ecken nicht mehr -soll heißen wenn ich my_function in die klasse A lege dann gehts

wo liegt mein fehler?
-
Also bei mir funktioniert das wunderbar - VC 2005.
Edit: Nochmal der Code der bei mir anstandslos geht, nicht das es zu Missverständnissen kommt:
#include <iostream> using namespace std; template <class T> class A { public: void foo() { B<T> b; b.bar(); } }; template <class T> class B { public: void bar(); }; template<> void B<double>::bar() { cout << "B::bar für double" << endl; } int main () { // Linker error //A<int> aint; //aint.foo(); // Einwandfrei: A<double> adbl; adbl.foo(); return 0; }MfG SideWinder
-
argh - hab nen fehler in der signatur gehabt - bei mehr als 8 parametern kommt sowas vor

-
B sollte allerdings deklariert sein, bevor wir
B<T> b;schreiben.
-
VC nimmts aber ohne fwd deklaration, aber ich hab hier den standard nicht rumliegen und weiß deshalb nicht, ob das auch bei templates direkt benötigt wird.