2016-08-15 6 views
-2

vor der Aktualisierung meines Mac, alles funktioniert gut. Nach dem Upgrade auf Capitan, da openmpi unbrauchbar wird (und ich weiß nicht, warum es scheint, dass nur ich es nicht in der Welt verwenden kann.) Ich muss zu MPICH wechseln.Fehler in C++ in Bezug auf Boost und Mac Upgrade

Sie versuchen, wann das gleiche Programm mit Boost mpi zu kompilieren, Serialisierung usw. habe ich den Fehler:

./common.h:67:23: error: expected expression 
     ar & t.get<0>(); 
        ^

Jede Hilfe? Vielen Dank.

Edit: t tatsächlich von Serialisierung der vollständige Code ist wie folgt ... Es ist in anderen Clustern arbeitet und meine früheren unungraded mac ...

namespace boost { namespace serialization { 


    template<typename Archive, typename T1> 

    void serialize(Archive & ar, 
        boost::tuple<T1> & t, 

        const unsigned int) 
    { 
     ar & t.get<0>(); 
    } 

    template<typename Archive, typename T1,typename T2> 
    void serialize(Archive & ar, 

        boost::tuple<T1,T2> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
    } 

    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
    } 

    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5,typename T6 > 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5, T6> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
     ar & t.get<5>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5,typename T6 ,typename T7> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5, T6 ,T7> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
     ar & t.get<5>(); 
     ar & t.get<6>(); 
    } 


}} 
+1

Jede Idee, was ein 't' ist? Wirklich hilfreich, wenn Sie es tun. – user4581301

+0

't' hat einen abhängigen Typ, also brauchen Sie' t.template get <0>() '. – aschepler

Antwort

0

ich diese Lösung am Ende mit Compiler Wechsel zurück zu gcc-4,8

tun nur

brew install gcc-4.8 

Und machen den entsprechenden Alias ​​in ~/.bash_profile,

alias g++="g++-4.8" 
alias gcc="gcc-4.8" 

export PATH="/usr/local/sbin:$PATH" 
export HOMEBREW_CC=gcc-4.8 
export HOMEBREW_CXX=g++-4.8 

danach tun:

brew install mpich --from_source