Próbuję zintegrować serializację z moimkod. Jednak pojawia się błąd „nie ma członka o nazwie”. Książka, którą czytam, mówi, że std :: pair nie potrzebuje pliku nagłówkowego, aby go załączyć i nie istnieje. Jak naprawić ten błąd? Mój kod wygląda następująco:
#include <iostream>
//ofstream/ifstream
#include <fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
//stringstream
#include <sstream>
//
#include <boost/serialization/complex.hpp>
#include <boost/serialization/bitset.hpp>
//#include <boost/serialization/
//BOOST_BINARY
#include <boost/utility/binary.hpp>
using namespace std;
int main()
{
complex<double> c(1,0);
bitset<3> b(BOOST_BINARY(101));
pair<int,int> p(1,2);
string s;
std::stringstream ss(s);
boost::archive::text_oarchive oa(ss);
oa<<c<<b<<p;
{
complex<double> c;
bitset<3> b;
pair<int,int> p;
boost::archive::text_iarchive ia(ss);
ia>>c>>b>>p;
}
return 0;
}
Odpowiedzi:
16 dla odpowiedzi nr 1Dodaj #include <boost/serialization/utility.hpp>
umożliwić std::pair
serializacja.
0 dla odpowiedzi nr 2
Dlaczego powinieneś std::pair
zapewnić serialize
funkcjonować? Standard nigdy tego nie mówi. Błędne jest również twierdzenie, że nie potrzebuje pliku nagłówka: tak naprawdę wymaga <utility>. Prawdopodobnie jest to już zawarte w innym pliku nagłówkowym, którego używasz.
Możesz podać własne serialize
funkcjonować. Boost już zawiera przykłady. W twoim przypadku musisz wcześniej dodać następujący kod main
.
namespace boost {
namespace serialization {
template <class Archive, typename T1, typename T2>
void serialize(Archive& ar, std::pair<T1, T2>& pr, const unsigned int version)
{
ar & pr.first;
ar & pr.second;
}
} // namespace serialization
} // namespace boost
Nawiasem mówiąc, nie widzę potrzeby używania string s
w twoim kodzie. Możesz usunąć tę linię i po prostu użyć:
std::stringstream ss;