gpt4 book ai didi

c++ - boost/archive/binary_woarchive.hpp 和/或 boost/archive/binary_wiarchive.hpp 的序列化示例?

转载 作者:太空狗 更新时间:2023-10-29 21:26:52 29 4
gpt4 key购买 nike

我试图找到一个很好的例子来说明如何使用这些二进制宽字符版本的 boost 序列化内容。我拼凑了一些代码来尝试让它工作,但不幸的是,我在尝试编译它时遇到了链接器错误的轰炸。

这是我的代码,以防我做任何明显错误的事情:

    #include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

#include <boost/archive/binary_woarchive.hpp>
#include <boost/archive/binary_wiarchive.hpp>

class testClass
{
public:
testClass()
{
}
testClass(const int intInput, const std::wstring stringInput, const float floatInput01, const float floatInput02)
{
ourString = stringInput;
testInt = intInput;
testFloat01 = floatInput01;
testFloat02 = floatInput02;
}
~testClass()
{}

int testInt;
std::wstring ourString;
float testFloat01;
float testFloat02;

int ReturnTestInt()
{
return testInt;
}

float RandomStuff()
{
float alpha01 = 26.9;
alpha01 /= 2;
return alpha01;
}

private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar &testInt;
ar &ourString;
ar &testFloat01;
ar &testFloat02;
}
};

int main()
{
std::vector<const testClass> objectStorage;


objectStorage.push_back(testClass(1, L"test\0", 9.14f, 6.662f));
objectStorage.push_back(testClass(2, L"temp\0", 0.29f, 3.331f));
objectStorage.push_back(testClass(3, L"then\0", 2.47f, 8.888f));


testClass testReceivedObject;
std::ifstream::pos_type size;

std::wofstream myFile;
boost::archive::binary_woarchive outputArchive(myFile);
myFile.open("Example.dat", std::ios::out | std::ios::binary);

if(myFile.is_open() && myFile.good())
{
std::cout<<"File opening successfully completed."<<std::endl;
unsigned int storageSize = objectStorage.size();

myFile.write(reinterpret_cast<wchar_t*>(&storageSize), (sizeof(unsigned int)));

for(int i = 0; i < objectStorage.size(); i++)
{
outputArchive<<objectStorage[i];
}
/*
myFile.write(reinterpret_cast<char*>(&objectStorage[0]), (sizeof(testClass)));
myFile.write(reinterpret_cast<char*>(&objectStorage[1]), (sizeof(testClass)));
myFile.write(reinterpret_cast<char*>(&objectStorage[2]), (sizeof(testClass)));
*/
}
else
{
std::cout<<"File opening NOT successfully completed."<<std::endl;
}
myFile.close();

std::wifstream myFileInput;
boost::archive::binary_wiarchive inputArchive(myFileInput);
myFileInput.open("Example.dat", std::ios::in | std::ios::binary | std::ios::ate);

if(myFileInput.is_open() && myFileInput.good())
{
std::cout<<"File opening successfully completed. Again."<<std::endl;

std::cout<<"READ:"<<std::endl;
size = myFileInput.tellg();
unsigned int numberOfObjects = 0;
myFileInput.seekg(0, std::ios::beg);
myFileInput.read(reinterpret_cast<wchar_t *>(&numberOfObjects), sizeof(unsigned int));
for(int i = 0; i < numberOfObjects; i++)
{
objectStorage.resize(objectStorage.size()+1);
inputArchive>>objectStorage[i];
//myFileInput.read(reinterpret_cast<wchar_t *>(&objectStorage[i])/*(&testReceivedObject)*/, sizeof(testClass));
}
std::cout<<std::endl<<"END."<<std::endl;
}
else
{
std::cout<<"Something has gone disasterously wrong."<<std::endl;
}
myFileInput.close();

for(int i = 0; i < objectStorage.size(); i++)
{
std::wcout<<objectStorage[i].ourString<<std::endl;
}
return 0;
}

错误如下:

1>main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::~basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >(void)" (??1?$basic_binary_oprimitive@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@XZ) referenced in function "public: __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::~binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >(void)" (??1?$binary_oarchive_impl@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@QAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::~basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >(void)" (??1?$basic_binary_iprimitive@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@XZ) referenced in function "public: __thiscall boost::archive::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::~binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >(void)" (??1?$binary_iarchive_impl@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@QAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >(class std::basic_streambuf<wchar_t,struct std::char_traits<wchar_t> > &,bool)" (??0?$basic_binary_oprimitive@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@_N@Z) referenced in function "protected: __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >(class std::basic_ostream<wchar_t,struct std::char_traits<wchar_t> > &,unsigned int)" (??0?$binary_oarchive_impl@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@AAV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@I@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >(class std::basic_streambuf<wchar_t,struct std::char_traits<wchar_t> > &,bool)" (??0?$basic_binary_iprimitive@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@_N@Z) referenced in function "protected: __thiscall boost::archive::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >(class std::basic_istream<wchar_t,struct std::char_traits<wchar_t> > &,unsigned int)" (??0?$binary_iarchive_impl@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAE@AAV?$basic_istream@_WU?$char_traits@_W@std@@@std@@I@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::init(void)" (?init@?$basic_binary_oprimitive@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXXZ) referenced in function "protected: void __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::init(unsigned int)" (?init@?$binary_oarchive_impl@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXI@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oarchive<class boost::archive::binary_woarchive>::init(void)" (?init@?$basic_binary_oarchive@Vbinary_woarchive@archive@boost@@@archive@boost@@IAEXXZ) referenced in function "protected: void __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::init(unsigned int)" (?init@?$binary_oarchive_impl@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXI@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::init(void)" (?init@?$basic_binary_iprimitive@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXXZ) referenced in function "protected: void __thiscall boost::archive::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::init(unsigned int)" (?init@?$binary_iarchive_impl@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXI@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iarchive<class boost::archive::binary_wiarchive>::init(void)" (?init@?$basic_binary_iarchive@Vbinary_wiarchive@archive@boost@@@archive@boost@@IAEXXZ) referenced in function "protected: void __thiscall boost::archive::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::init(unsigned int)" (?init@?$binary_iarchive_impl@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXI@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iarchive<class boost::archive::binary_wiarchive>::load_override(struct boost::archive::class_name_type &,int)" (?load_override@?$basic_binary_iarchive@Vbinary_wiarchive@archive@boost@@@archive@boost@@IAEXAAUclass_name_type@23@H@Z) referenced in function "protected: void __thiscall boost::archive::binary_iarchive_impl<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::load_override<struct boost::archive::class_name_type>(struct boost::archive::class_name_type &,int)" (??$load_override@Uclass_name_type@archive@boost@@@?$binary_iarchive_impl@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXAAUclass_name_type@12@H@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::save(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?save@?$basic_binary_oprimitive@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: static void __cdecl boost::archive::save_access::save_primitive<class boost::archive::binary_woarchive,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class boost::archive::binary_woarchive &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$save_primitive@Vbinary_woarchive@archive@boost@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@save_access@archive@boost@@SAXAAVbinary_woarchive@12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_woarchive,wchar_t,struct std::char_traits<wchar_t> >::save(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (?save@?$basic_binary_oprimitive@Vbinary_woarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) referenced in function "public: static void __cdecl boost::archive::save_access::save_primitive<class boost::archive::binary_woarchive,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > >(class boost::archive::binary_woarchive &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (??$save_primitive@Vbinary_woarchive@archive@boost@@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@save_access@archive@boost@@SAXAAVbinary_woarchive@12@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)
1>main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_wiarchive,wchar_t,struct std::char_traits<wchar_t> >::load(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &)" (?load@?$basic_binary_iprimitive@Vbinary_wiarchive@archive@boost@@_WU?$char_traits@_W@std@@@archive@boost@@IAEXAAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) referenced in function "public: static void __cdecl boost::archive::load_access::load_primitive<class boost::archive::binary_wiarchive,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > >(class boost::archive::binary_wiarchive &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &)" (??$load_primitive@Vbinary_wiarchive@archive@boost@@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@load_access@archive@boost@@SAXAAVbinary_wiarchive@12@AAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

非常感谢您提供有关了解问题所在以及如何解决问题的建议。

最佳答案

事实证明,boost/archive/binary_woarchive.hppboost/archive/binary_wiarchive.hpp 是多余的。

相反,boost/archive/binary_oarchive.hppboost/archive/binary_iarchive.hpp 即使对于包含宽字符变量的类实例也能正常工作!

我希望这些信息对某人有所帮助。

关于c++ - boost/archive/binary_woarchive.hpp 和/或 boost/archive/binary_wiarchive.hpp 的序列化示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10439984/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com