2016-08-15 26 views
-2

升級我的mac之前,一切工作正常。升級到Capitan後,由於openmpi變得無法使用(我不知道爲什麼看起來只有我不能在世界上使用它)。我必須切換到MPICH。關於提升和mac升級的C++錯誤

當嘗試編譯與升壓MPI,系列化等相同的程序,我得到了錯誤:

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

任何幫助嗎?謝謝。

編輯:T實際上從序列化的完整代碼是跟着......它可以在其他集羣和我以前的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

任何想法了't'是什麼?如果你這樣做真的很有幫助。 – user4581301

+0

't'有一個依賴類型,所以你需要't.template得到<0>()'。 – aschepler

回答

0

我最終改變編譯器返回到解決這個起源GCC-4.8

只是做

brew install gcc-4.8 

,並在〜/ .bash_profile中,

相應的別名10
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 

之後,這樣做:

brew install mpich --from_source