2016-05-24 63 views
-3
#include <boost/serialization/vector.hpp> 

template<class Archive> 
void ScenarioResult::serialize(Archive & ar, const unsigned int version) 
{ 
       ar & scenario; 
} 

-lboost_serialization被包括在連接選項升壓系列化未定義參考

在功能serialize<boost::mpi::packed_oarchive, ScenarioResult>': /people/v/boost_1_59_0/boost/serialization/access.hpp:116: undefined reference to空隙ScenarioResult ::序列化(升壓:: MPI :: packed_oarchive &,無符號整型)」 Integration.o:在功能serialize<boost::mpi::packed_iarchive, ScenarioResult>': /people/v/boost_1_59_0/boost/serialization/access.hpp:116: undefined reference to無效ScenarioResult ::連載(升壓:: MPI :: packed_iarchive &,無符號整型)」 collect2:錯誤:LD返回1退出狀態

回答

1

其實,編輯的問題將是很好的,但是,我認爲我有一個想法發生了什麼事情:它看起來像你試圖單獨編譯一個函數模板。

這個意義上,你正在做以下幾點:

g++ ScenarioResult.cpp -lboost_serialization 

這是引發錯誤。

ScenarioResult :: serialize是a template function,這意味着它根據傳遞給的模板參數的類型被實例化。所以,在編譯時,編譯器並不知道類型,因此不能生成代碼。

快速修復將是to move the implementation of your serialize method into the header file of the class。或者,explicitly instansiate it in the cpp file如下:

void ScenarioResult::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive &ar, const unsigned int); 
+0

謝謝! text_oarchive仍然是模板參數,即使通過了整數的矢量? – Tims

+0

將它移到標題處,這樣更好 – Vtik