schwierigkeiten bei namespace zuordnung



  • Hallo ins Forum. Ich habe ein Problem mit diesem Code:

    #include <iostream>
    
    namespace a 
    { 
    	namespace b 
    	{
    		namespace c
    		{
    			template<typename T>
    			class wurst
    			{
    				T a;
    			};
    		}
    	}
    }
    
    template<typename T>
    class Test
    {
    protected:
    	typedef a::b::c::wurst<T> wurst;
    public:
    	const wurst &GetWurst() const;
    };
    
    template<typename DataType>
    const wurst Test<DataType>::GetWurst() const
    {
    	std::cout << "wurst" << std::endl;
    }
    

    Wenn ich z.B. versuche:

    Test<double> test;
    

    Dann bekomme ich diesen Fehler für die Zeile (28) :

    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    

    Wie lautet die Syntax für solche Abkürzungen? Danke!



  • wurst ausserhalb der Klasse muss qualifiziert werden. Ausserdem stimmen die Rückgabetypen nicht überein ( const wurst vs. const wurst& ). Und warum nennst du Templateparamter in der Klassendefinition und in den Methodendefinitionen verschieden?


  • Mod

    template<typename DataType>
    const wurst Test<DataType>::GetWurst() const
    

    Hier wird wurst im Scope der Deklaration gesucht und folglich nicht gefunden. Erst nach dem Test<DataType>:: befindet man sich im Scope der Klasse. Also

    template<typename DataType>
    const typename Test<DataType>::wurst& Test<DataType>::GetWurst() const
    


  • [quote="Nexus"] wurst ausserhalb der Klasse muss qualifiziert werden.

    Warum? ich habe es doch im typedef qualifiziert? Wenn das Template generiert wird, muss es doch alles benötigte wissen.

    [quote="Nexus"]Ausserdem stimmen die Rückgabetypen nicht überein ( const wurst vs. const wurst& ). Und warum nennst du Templateparamter in der Klassendefinition und in den Methodendefinitionen verschieden?

    Sagen wir mal dass diese Sachen stimmen. Ich habe den Quellcode in möglichst einfache Sachen geändert.. und habe anscheinend was vergessen.



  • Hat wunderbar funktioniert. Danke für die schnelle Hilfe an euch.


Anmelden zum Antworten