使用Boost进行Visual Studio编译

3

我一直在尝试使用Visual Studio 2012编译一些包括一些Boost类的代码,但是始终会收到有关多重声明的错误。

1>c:\boost\boost_1_53_0\boost\tr1\memory.hpp(43): error C2874: using-declaration causes a multiple declaration of 'boost::bad_weak_ptr'

这种情况发生在包含自boost\tr1\memory.hpp的其他几个Boost类中。

我已经检查过附加的包含目录和库目录是否到位,据我所知是正确的,但问题仍然存在。有没有人有什么想法?谢谢。


也许你正在做类似于使用Boost命名空间的事情,如“using namespace std”。请注意,<memory>头文件也公开了一个bad_weak_ptr - Mihai Todor
据我所知,除了主文件外,我的代码中没有使用任何命名空间。 - Aetylus
这里有同样的问题。我有一个using namespace boost指令。我知道它也在memory头文件中定义,但我不明白vc10和11之间的区别。vc11版本有一行using _STD shared_ptr。我通过删除boost::memory包含来“解决”了我的问题。请问有人能详细说明一下吗? - anhoppe
1个回答

0
问题在于shared_ptr是C++11中std和std::tr1的一部分。由于VS2012(大多数情况下)符合C++11标准,因此boost\tr1\memory.hpp和memory头文件之间存在命名空间冲突。
我认为这可能与using指令有关,正如Mihai Todor所指出的那样。在我的情况下,我可以删除boost memory.hpp的包含。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接