4 回答

TA貢獻883條經(jīng)驗 獲得超454個贊
我再多說幾句,不推薦用 using namespace std; 寫法。
你知道C++標準庫中的符號都是定義在std命名空間中的,使用它們時必須在前面寫上std::來指明命名空間。
有時候覺得每次都這樣寫很麻煩,就用 using namespace std;? 這樣就可以省下寫名字前面的std::。但這樣做等于將 std 中的名字都暴露了出來! 如果你程序中用了和標準庫中同樣的名字就會發(fā)生命名沖突。要知道標準庫中的名字是非常多的,要完全避免使用是很難的。
原本C++中引入命名空間就是為了避免命名沖突! 它把所有標準庫里的名字都放入std中,雖然在使用庫中符號時會有些麻煩,但就不會和你自己程序中的名字沖突了。
而你寫 using namespace std; 等于違背了命名空間的初衷。? 你這個例子就是在無意中引起了命名沖突。
一般建議使用標準庫中符號時都要明確寫上 std::
如果真的想要少寫 std::,那么推薦另一種寫法:
using std::cout;
using std::cin;
像這樣明確指出想簡寫的名字,只把這幾個名字從std命名空間中暴露出來。
這樣你仍然可以在代碼中直接使用 cout 和 cin。 而你再定義 size 也不會有問題(庫中的 size 還在 std 中,不會和這個沖突)。

TA貢獻883條經(jīng)驗 獲得超454個贊
VS 中 C2872 錯誤是指在命名檢查時發(fā)現(xiàn)歧義。這里也就是指 size 這個名字發(fā)生命名沖突。
這有可能是與<iostream>里標準庫中的命名沖突了。 不過這一點我很奇怪,我知道的 std::size 是在<iterator>中的。? 也許 VC 的<iostream>中也有叫 size 的吧。
你可以試試用下面方法解決:
要么,把這個變量改為別的名字(別用size)
要么,去掉上一行的?using namespace std;。 在代碼中用到標準庫中的名字時都在前面加上 std::,如 std::cout? ?std::cin
用上述兩種方法的任何一種都可以,再看看還會不會報這個錯。

- 4 回答
- 1 關注
- 6203 瀏覽
添加回答
舉報