MinGW (4.7.2) + Boost.Thread + Boost.Mutex + Boost.Chrono = tuple errors



  • Ahoi.

    Derzeit bin ich mit mit Windows 7 x64 unterwegs.

    Ich inkludiere <boost/thread/mutex.hpp> , <boost/thread/thread.hpp> , <boost/thread/lock_guard.hpp> , und <boost/chrono.hpp> , verlinke die Thread-, die System- und die Chrono-Library und bekomme folgende komische Fehler die auf den Standard-Header von std::tuple<> zurückzuführen sind: Scrollen erspart.

    Ich habs auch schon versucht vor die Header ein Makro #define BOOST_THREAD_USE_LIB definiert, kommt aber das gleiche Resultat dabei raus.

    So sehr es mir auch Leid tut diese drei ganz pöse Wörter zu niederschreiben zu müssen: Es funktioniert nicht.

    Jemand eine Idee (btw, msvc110 kompilierts einwandfrei)?
    Bei weiteren notwendigen Informationen, braucht Ihr bloß Bescheid zu sagen.

    Mit freundlichen Grüßen,
    Winston.



  • Code?

    Am linken kann es ja nicht liegen, das sind Compiler-Fehler.
    Was mich nachdenklich macht ist die Zeile

    'swap' declared as function returning a function|

    Aber dazu mehr, wenn der Code da ist.



  • Sone schrieb:

    Code?

    Sorry, aber das ganze ist in sehr vielen verschiedenen Dateien aufgeteilt - ich wüsst jetzt nicht wo ich anfangen sollte, ohne euch mit Code zuzutexten. Aber hier ein Stück Code wo alles in einem Header inkludiert wird (um zwischen Standard und Boost zu unterscheiden):

    #ifndef <HIDDEN>_HPP
    #define <HIDDEN>_HPP
    
    #ifndef __MINGW32__
        #include <mutex>
        #include <thread>
        #include <chrono>
    
        namespace namensraumDessenNamenIchHierVerstecke{
            namespace this_thread = std::this_thread;
            namespace chrono = std::chrono;
    
            using std::mutex;
            using std::lock_guard;
        }
    
    #else
        #define BOOST_THREAD_USE_LIB
    
        #include <boost/thread/thread.hpp>
        #include <boost/thread/mutex.hpp>
        #include <boost/thread/lock_guard.hpp>
        #include <boost/chrono.hpp>
    
        namespace namensraumDessenNamenIchHierVerstecke{
            namespace this_thread = boost::this_thread;
            namespace chrono = boost::chrono;
    
            using boost::mutex;
            using boost::lock_guard;
        }
    
    #endif
    
    #endif
    

    Natürlich werden in allen anderen Dateien die Bezeichner mit namensraumDessenNamenIchHierVerstecke::xyz verwendet.
    Und wie gesagt mit msvc110 kompilierts ganz flott (auch mit boost ⚠ ~[jawoll, auch wenns bei diesem Code nicht so aussehen mag]~).



  • Hallo Community,

    ich wollte nur mal Bescheid sagen, dass ich das Problem gelöst habe.
    In einem der vielen Headern habe ich vergessen die Standard-Header durch meinen Header - der zwischen Standard und Boost unterscheidet - zu ersetzen.

    Das wars auch schon.
    Schönen Tag noch.


Anmelden zum Antworten