2012-02-19 54 views
0

嘗試編譯具有與VS2010的shared_ptr許多用途舊的項目。 所以,我已預編譯的頭(stdafx.h中)其中:TR1:提高VS VS2010,使用shared_ptr的沒有命名空間

..
使用命名空間std; ..

的#include 「升壓/ shared_ptr的」
使用命名空間升壓;

以後在代碼中我集中使用了shared_ptr spObject;

我應該在stdafx.h中改變,讓我沒有必要無處不在的代碼* shared_ptr的*爲* some_namespace :: shared_ptr的替換*?
是否有可能無需升壓的命名空間衝突做/升壓:: TR1 /性病:: TR1 /性病?

現在我有很多的錯誤:

錯誤C2872: 'shared_ptr的':不明確的符號 可能是「K:\ boost10 \提升\ smart_ptr \ shared_ptr.hpp(165):升壓:: shared_ptr的」 或 'C:\ Program Files文件(x86)的\微軟的Visual Studio 10.0 \ VC \包括\內存(1418)的std :: TR1 :: shared_ptr的'

+0

可能是不可能的?我看到的唯一變化是定義宏**#定義的shared_ptr的std :: shared_ptr的** – 2012-02-19 18:52:52

+0

現在我覺得是不是在C++可能(沒有明確的資格命名空間),它是如此傷心:( – 2012-02-19 19:07:33

+1

這是一原因是'using namespace' is bad。不要在未來的項目中使用它,或者至少只在_one_庫上使用它,你仍然可以通過使用更多限制的'using std :: shared_ptr'來避免大量的命名空間限制等等聲明。 – bames53 2012-02-26 07:32:36

回答

4

不要把using namespace的頭,因爲你發現它可能會破壞後面的標題,並且因爲你無法更改這些標題,所以你可以做的不多。

在功能範圍,您可以使用using聲明,以消除歧義:

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

但是,這不會在全局命名空間的工作,因爲你已經污染該範圍與使用不慎指令。

相關問題