2013-04-24 144 views
3

我一直在尝试编译一些代码,包括使用Visual Studio 2012的一些Boost类,并且我一直在接收关于多个声明的错误。Visual Studio使用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类发生。

我检查过是否有其他包含目录和库目录,并且据我所知,但问题依然存在。任何人有任何想法?谢谢。

+0

也许你正在做类似“使用命名空间标准”的东西,而与Boost命名空间类似。请注意,[''](http://en.cppreference.com/w/cpp/header/memory)标头公开['bad_weak_ptr'](http://en.cppreference.com/w/cpp/memory/bad_weak_ptr)。 – 2013-04-24 09:49:27

+0

据我可以告诉,我没有使用任何命名空间为我的代码减主文件。 – Aetylus 2013-04-24 10:18:28

+0

这里同样的问题。我有一个使用命名空间升压指令。我知道它也是在内存头文件中定义的,但我没有得到vc10和11之间的区别.vc11版本的行使用_STD shared_ptr。我通过删除boost :: memory include来“解决”了我的问题。有人能详细说明吗? – anhoppe 2013-07-25 10:26:53

回答

0

问题是shared_ptr是C++ 11中std std :: tr1的一部分。由于VS2012(主要)符合C++ 11标准,因此boost \ tr1 \ memory.hpp和内存头文件之间似乎存在命名空间冲突。

正如Mihai Todor指出的那样,我认为它确实可能与使用指令有关。在我的情况下,我可以删除boost memory.hpp include。