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 Funktionsdeklaration
    

    die 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 😉


  • Mod

    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.


Anmelden zum Antworten