0
#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 的回答:

读取和写入 C++ 向量到文件

在那里,我找到了将矢量数据写入文件的解决方案。

编辑:有谁知道,为什么这个程序会抛出一个“std::bad_cast”?是否有可能,此代码在其他机器上运行并且问题与我的系统有关?

解决方案: 为了弄清楚,如果我的问题与一些奇怪的配置错误有关,我在另一台计算机上设置了 Linux Mint 并尝试在那里编译和运行上述代码。令人惊讶的是,它没有抛出“std::bad_cast”。然后我用自制软件卸载了 boost,并尝试使用 boost-Website 上的说明和我首选的编译器 gcc-4.9 编译库。之后,我的代码编译并运行良好。我认为问题在于,我使用的 boost-libraries 是用另一个编译器版本编译的,而不是我在自己的代码中使用的编译器版本。

4

0 回答 0