2016-08-15 13 views
-2

、すべてうまくいきます。 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 get <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 
関連する問題