4 回答
TA贡献883条经验 获得超454个赞
我再多说几句,不推荐用 using namespace std; 写法。
你知道C++标准库中的符号都是定义在std命名空间中的,使用它们时必须在前面写上std::来指明命名空间。
有时候觉得每次都这样写很麻烦,就用 using namespace std; 这样就可以省下写名字前面的std::。但这样做等于将 std 中的名字都暴露了出来! 如果你程序中用了和标准库中同样的名字就会发生命名冲突。要知道标准库中的名字是非常多的,要完全避免使用是很难的。
原本C++中引入命名空间就是为了避免命名冲突! 它把所有标准库里的名字都放入std中,虽然在使用库中符号时会有些麻烦,但就不会和你自己程序中的名字冲突了。
而你写 using namespace std; 等于违背了命名空间的初衷。 你这个例子就是在无意中引起了命名冲突。
一般建议使用标准库中符号时都要明确写上 std::
如果真的想要少写 std::,那么推荐另一种写法:
using std::cout;
using std::cin;
像这样明确指出想简写的名字,只把这几个名字从std命名空间中暴露出来。
这样你仍然可以在代码中直接使用 cout 和 cin。 而你再定义 size 也不会有问题(库中的 size 还在 std 中,不会和这个冲突)。
TA贡献883条经验 获得超454个赞
VS 中 C2872 错误是指在命名检查时发现歧义。这里也就是指 size 这个名字发生命名冲突。
这有可能是与<iostream>里标准库中的命名冲突了。 不过这一点我很奇怪,我知道的 std::size 是在<iterator>中的。 也许 VC 的<iostream>中也有叫 size 的吧。
你可以试试用下面方法解决:
要么,把这个变量改为别的名字(别用size)
要么,去掉上一行的 using namespace std;。 在代码中用到标准库中的名字时都在前面加上 std::,如 std::cout std::cin
用上述两种方法的任何一种都可以,再看看还会不会报这个错。
- 4 回答
- 1 关注
- 6011 浏览
添加回答
举报