G++ sieht Bezeichner nicht/Widerspruch zum winCompiler bei Initalisierung einer verschachtelten Map im Header File



  • Hallo zusammen,

    unter Linux fliegt mir das hier um die Ohren mit
    A.h:126:52: error: 'enumsByModel' was not declared in this scope

    class A : public boost::enable_shared_from_this<A>
    	{	
    	public:
    
    	private:		
    
    		std::map<std::string,std::map<int, std::string>> enumsByModel;
                    void initalizeModels();
    	};
    

    Unter Windows funktioniert dies dagegen problemlos. Daher stellt sich mir die Frage worin der g++ compiler hierbei für ein Problem sieht.

    Diese Map wird im ctor via initalizeModels() befüllt.

    Vielen Dank



  • Testweise kannst du mal aus

    std::map<std::string,std::map<int, std::string>> enumsByModel;
    

    Das hier machen:

    std::map<std::string,std::map<int, std::string> > enumsByModel;
    

    Nach dem alten standard muss da nen leerzeichen rein. Inwieweit das dein compiler ohne Leerzeichen unterstützt weiß ich nicht.



  • Unter Visual C++ werden die neuen C++11 Features immer verwendet,
    daher hat Visual C++ 2010 keine Probleme damit deinen Code zu kompilieren.

    Den GCC muss man allerdings erst dazu überreden, C++11 zu sprechen.
    Dazu übergibst du dem Compiler den Parameter -std=c++0x
    z.B.:
    g++ -ofoo -std=c++0x foo.cpp

    Danach wird auch der g++ deinen neuen Code mit Freuden übersetzen. 🙂



  • vielen Dank Q, genau das war der Fehler

    Ich bin etwas bestürzt, verwundert und geschockt...



  • Blutgerinsel schrieb:

    Ich bin etwas bestürzt, verwundert und geschockt...

    Warum?


Anmelden zum Antworten