Boost mag meine function nich



  • jo... ich wollt ml threads probieren ... aber boost verweigert mir die einfachsten threadoperationen ...
    ich hab den simplen quelltext:

    #include <boost/thread/thread.hpp>
    #include <boost/thread/mutex.hpp>
    #include <boost/thread/thread.hpp>
    #include <boost/thread/condition.hpp>
    #include <boost/thread/exceptions.hpp>
    #include <boost/thread/mutex.hpp>
    #include <boost/thread/once.hpp>
    #include <boost/thread/recursive_mutex.hpp>
    #include <boost/thread/tss.hpp>
    #include <boost/thread/xtime.hpp> 
    #include <iostream>
    
    using namespace std;
    
    boost::mutex io_mutex;
    
    void inc()
    {
     int i;
     i++;     
    };
    
    int main()
    {
      boost::thread thrd1(inc());
      thrd1.join;
      return 0;
    };
    

    und bekomme exakt 2 fehler:

    main.cpp:26: error: invalid use of void expression
    main.cpp:27: error: statement cannot resolve address of overloaded function
    

    kann mir einer sagen, wie ich vor allem fehler no. 1 ( den mit der void expression) beheben könnte ?
    dank euch schonmal



  • Du solltest die Funktion und nicht deren Ergebnis übergeben.

    boost::thread thrd1(inc);
    

  • Mod

    Du willst doch die Funktion (bzwl. einen Zeiger darauf) übergeben, nicht das Funktionsergebnis. Also lass die Klammern nach inc weg. In der nächsten Zeile fehlen sie dagegen.



  • boah ey ... echt hammer forum ... 2 min..
    ich bin überwältigt ...

    also kompilliert hatter jetz

    nicht allerdings von den verschiedenen linker errors die mir mein nettes Dev nun entgegenschmeißt:

    [Linker error] undefined reference to `boost::thread::join()' 
      [Linker error] undefined reference to `boost::thread::~thread()'
      ...
      da kommen dann noch 6 sone teile
    

    habter da auch ne erklärung?
    wenn ja wär das Hammer ^^



  • Hast du denn auch die Thread-lib mit gelinkt bzw. weiß dein Compiler wo sich die dazugehörigen libs und dlls befinden??



  • die sind im include ordner wie zum beispiel iostream auch ... reicht das... oder muss ich die noch extra einbinden ?



  • boost::thread ist eine Bibliothek. Hier reicht es nicht einfach header einzubinden. Wie hast du boost denn installiert? Hast du die boost-libs auch für deinen Compiler erstellt?



  • ich denk mal da liegt der Hase im Pfeffer .....ich hab den boost ordner lediglich in die include geschmissen ... war wohl n bissel voreilig, was? hoffe ihr seid mir nicht böse



  • so habs gefunden wie ichs installiere .. gibt da n schönes tut bei
    http://wagjo.com/index.php?id=27
    danke für alles leute .. ich meld mich hier mal an .. das scheint echt gut zu sein ^^



  • boost ist eine methode , also thread.join()


Anmelden zum Antworten