2010-07-06 81 views
1

曾經有人暗示,在頭文件中這樣做,不建議:爲什麼我不應該在標題中放置「using namespace std」?

using namespace std; 

爲什麼不勸?

莫非導致鏈接錯誤是這樣的:(linewrapped爲了方便)

error LNK2005: "public: __thiscall std::basic_string<char,struct 
std::char_traits<char>,class std::allocator<char> >:: 
~basic_string<char,struct std::char_traits<char>,class std::allocator<char> > 
(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 
already defined in tools.lib(Exception.obj) 
+0

不完全相同:http://stackoverflow.com/questions/1265039/using-std-namespace – 2010-07-06 12:46:55

+0

我什至不把我的.cpp文件。我傾向於使用'std :: vector '等 – 2011-11-11 22:38:15

回答

9

,因爲它迫使任何人誰使用頭文件帶來的std命名空間到全球範圍。如果他們有一個與標準庫類名稱相同的類,這可能會成爲問題。

1

如果文件包含在其他地方,編譯單元將隱含地獲取using指令。當名稱重疊時,這可能導致混淆錯誤。

+0

它可能會導致像這樣的鏈接器錯誤:錯誤LNK2005:「public:__thiscall std :: basic_string ,class std :: allocator > :〜basic_string ,class std :: allocator >(void)「(?? 1?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ QAE @ XZ)已經在tools.lib(Exception.obj)中定義了 ?? – 2010-07-06 12:49:32

+0

@Tony:你應該在問題中加上這個。以適當的格式閱讀會更容易。 – pmr 2010-07-06 12:58:33

相關問題