#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
int main()
{
std::ofstream file("data.dat", std::ios_base::binary);
boost::archive::binary_oarchive oar(file);
return 0;
}
我用下面的 Makefile 编译了上面的代码。
CC = g++
CFLAGS = -pedantic -std=c++11 -I/usr/local/Cellar/boost/1.54.0/include
LDFLAGS = -L/usr/local/Cellar/boost/1.54.0/lib -lboost_iostreams-mt -lboost_serialization-mt
all: test
test: test.o
$(CC) $(CFLAGS) test.o $(LDFLAGS) -o test
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o
当我运行程序时,它会抛出一个std::bad_cast
. 问题在于boost::archive::binary_oarchive oar(file);
. 我想,file
不知何故与binary_oarchive
. 我正在使用 Mac OS X 10.6 的系统,并在几个小时前使用自制软件来安装 boost。此示例代码摘自 Emile Cormier 的回答:
在那里,我找到了将矢量数据写入文件的解决方案。
编辑:有谁知道,为什么这个程序会抛出一个“std::bad_cast”?是否有可能,此代码在其他机器上运行并且问题与我的系统有关?
解决方案: 为了弄清楚,如果我的问题与一些奇怪的配置错误有关,我在另一台计算机上设置了 Linux Mint 并尝试在那里编译和运行上述代码。令人惊讶的是,它没有抛出“std::bad_cast”。然后我用自制软件卸载了 boost,并尝试使用 boost-Website 上的说明和我首选的编译器 gcc-4.9 编译库。之后,我的代码编译并运行良好。我认为问题在于,我使用的 boost-libraries 是用另一个编译器版本编译的,而不是我在自己的代码中使用的编译器版本。