tr1:boost vs vs2010,使用不带命名空间的shared_ptr

时间:2012-02-19 15:38:33

标签: visual-studio-2010 boost namespaces shared-ptr tr1

尝试编译与vs2010一起使用shared_ptr的旧项目。 所以,我预编译了头文件(stdafx.h):

  

..
  using namespace std;   ..

     

#include" boost / shared_ptr"
  使用命名空间提升;

以后在代码中我强烈使用shared_ptr spObject;

我应该在stdafx.h中更改什么,以便我不需要在代码* shared_ptr *中的任何地方替换为* some_namespace :: shared_ptr *?
是否有可能没有boost / boost :: tr1 / std :: tr1 / std?

的命名空间冲突

现在我有很多错误:

  

错误C2872:' shared_ptr' :暧昧的象征            可能是' k:\ boost10 \ boost \ smart_ptr \ shared_ptr.hpp(165):boost :: shared_ptr'            或者&c; \ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ memory(1418):std :: tr1 :: shared_ptr'

1 个答案:

答案 0 :(得分:4)

不要将using namespace放在标题中,因为您发现它可能会破坏后面的标题,并且因为您无法更改这些标题,所以您无能为力。

在功能范围内,您可以使用using声明来消除歧义:

void f()
{
  using std::tr1::shared_ptr;
  shared_ptr<int> p;
}

但是这在全局命名空间中不起作用,因为你已经用粗心的使用指令污染了这个范围。