'thread' is not a member of 'std'



  • Hiho,

    wollte mal ganz nebenbei kurz threads anschaun' und was seh ich?

    #include <iostream>
    #include <thread>
    
    int main()
    {
        auto Hello([]() ->void {for(;;)std::cout << "Hello ";});
        auto World([]() ->void {for(;;)std::cout << "World!";});
    
        std::thread a(Hello), b(World);
        a.join();
        b.join();
    }
    

    Compiliert mit dem C++11-flag.

    Hauptsächlicher Fehler: thread ist nicht im std-namespace!
    Mein Compiler ist GCC 4.6.1 .
    Ich hab schon ähnliche Sachen im Netz gefunden, die helfen mir jedoch irgendwie nicht weiter.

    VD im VR 😋



  • Mal abgesehen davon, dass ich deinen Fehler gerade nicht kenne, kannst du deinen Code vereinfachen...

    #include <iostream>
    #include <thread>
    
    int main()
    {
        std::thread a([]{ for(;;) std::cout << "Hello "; });
        std::thread b([]{ for(;;) std::cout << "World!"; });
        a.join();
        b.join();
    }
    


  • 314159265358979 schrieb:

    Mal abgesehen davon, dass ich deinen Fehler gerade nicht kenne, kannst du deinen Code vereinfachen...

    #include <iostream>
    #include <thread>
    
    int main()
    {
        std::thread a([]{ for(;;) std::cout << "Hello "; });
        std::thread b([]{ for(;;) std::cout << "World!"; });
        a.join();
        b.join();
    }
    

    Stimmt, danke. Man bekommt was man verdient.



  • Bei mir (GCC 4.6.2) compiliert es, aber beim Ausführen bekomme ich einen Fehler:

    terminate called after throwing an instance of 'std::system_error'
      what():  Operation not permitted
    

    EDIT: Oh, der Fehler kommt wenn man pthread nicht linkt ... Sollte man da nicht eigentlich einen Linkererror bekommen? Jetzt funktioniert es auf jeden Fall.



  • pyhax schrieb:

    Bei mir (GCC 4.6.2) compiliert es, aber beim Ausführen bekomme ich einen Fehler:

    terminate called after throwing an instance of 'std::system_error'
      what():  Operation not permitted
    

    EDIT: Oh, der Fehler kommt wenn man pthread nicht linkt ... Sollte man da nicht eigentlich einen Linkererror bekommen? Jetzt funktioniert es auf jeden Fall.

    Nein, ich bekomm einen Compiler-error. Welche Flags hast du?



  • g++ ./threads.cpp -Wall -Wextra -pedantic -othreads -std=c++0x -g -lpthread
    

    GCC 4.6.2 hat noch kein -std=c++11



  • Dankeschön. Jetzt versuch ich es mit Boost.thread und es klappt genauso wenig:

    Linker-errors:

    undefined reference to `_imp___ZN5boost6thread12start_threadEv'
    undefined reference to `_imp___ZN5boost6thread12start_threadEv'
    undefined reference to `_imp___ZN5boost6thread4joinEv'
    undefined reference to `_imp___ZN5boost6thread4joinEv'
    undefined reference to `_imp___ZN5boost6threadD1Ev'
    undefined reference to `_imp___ZN5boost6threadD1Ev'
    undefined reference to `_imp___ZN5boost6threadD1Ev'
    undefined reference to `_imp___ZN5boost6threadD1Ev'
    

    'S nervt, ehrlich. Ich linke doch die system- und thread-libs, was denn noch? 😕 😡



  • Upsi, sorry! Hab ganz vergessen, BOOST_THREAD_USE_LIB zu definieren bevor ich den Header einbinde. Jetzt klappt alles wunderbar. Schönes Wochenende!


  • Mod

    Na, lies doch mal die Namen. Welche Bibliothek wird da wohl fehlen?

    edit: Da warst du selber schneller als ich.



  • SeppJ schrieb:

    Na, lies doch mal die Namen. Welche Bibliothek wird da wohl fehlen?

    Wie meinst du das?

    Ich hab jetzt

    libboost_system-mgw46-mt-1_48.a
    libboost_thread-mgw46-mt-1_48.a
    

    gelinkt. Wenn ich das oben genannte Makro definiere, klappt alles wunderbar...?


Anmelden zum Antworten