Traits



  • Hallo,

    zur Zeit versuche ich mich in Traits einzulesen und bin momentan auf ein Problem gestoßen.
    Hier der Code

    template<int i>
    struct loop
    {
    	static void write(std::string text)
    	{
    		std::cout << text;
    		loop<i - 1>::write(text);
    	}
    };
    
    template<>
    struct loop<0>
    {
    	static void write(std::string text)
    	{
    		std::cout << text;
    	}
    };
    
    int main()
    {
    	loop<5>::write("Test");
    	_getch();
    	return 0;
    }
    

    Der Compiler zeigt mir an der völlig falschen Stelle den Fehler:

    Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)

    Er zeigt mir also den Fehler bei Zeile 16 an. cout hätte keine Operatorenüberladung für string. Wenn ich aber aus dem Trait eine völlig normale Struktur mache, ist es für ihn kein Problem mehr.

    Über Hilfe wäre ich erfreut.



  • wahrscheinlich fehlt nur ein #include <string>
    und mit Traits hat das alles nichts zu tun



  • Ich kann den Fehler nicht reproduzieren. Füge ich

    #include <iostream>
    #include <string>
    

    hinzu und entferne ich _getch() , dann kann ich es kompilieren und das Programm verhält sich wie gewünscht.



  • Ja es lag tatsächlich an dem string, tut mir Leid.



  • Eine Frage habe ich aber dennoch.
    Wenn ich den Code hiermit erweitere

    template<int i>
    struct loop
    {
        static void write(std::string text)
        {
            //0 und negative Zahlen abfangen
            if(i > 1)
            {
                std::cout << text;
                loop<i - 1>::write(text);
            }
        }
    };
    
    template<>
    struct loop<0>
    {
        static void write(std::string text)
        {
            std::cout << text;
        }
    };
    
    int main()
    {
        //0 zum testen
        loop<0>::write("Test\n");
        return 0;
    }
    

    Scheint es ewig zu kompilieren, obwohl ich doch die 0 Abfange. Wenn ich statt 0 eine andere positive Zahl nehme, kompiliert und es funktioniert. Debuggen funktioniert auch nicht, da es ja zur Compilezeit ist. Weiß einer warum?



  • Hat sich erledigt. War ein dummer Fehler von mir.
    Mfg



  • Bei mit (gcc 4.6.3) kompiliert es ohne Probleme. Ich sehe auch keine Fehler in deinem Programm.

    gruß
    syntax


Anmelden zum Antworten