error C2872: “count”: 不明确的符号
可能是“conflict.cpp(4) : int count” 或 “C:\Program Files\Microsoft Visual Studio 11.0\VC\INCLUDE\xutility(3251) : iterator_traits<_Iter>::difference_type std::count(_InIt,_InIt,const _Ty &)”
conflict.cpp(12) : error C2872: “count”: 不明确的符号 可能是“conflict.cpp(4) : int count” 或 “C:\Program Files\Microsoft Visual Studio 11.0\VC\INCLUDE\xutility(3251) : iterator_traits<_Iter>::difference_type std::count(_InIt,_InIt,const _Ty &)”
出错代码:
#include <iostream>
using namespace std;
int count = 0;
int increment()
{
return ++count;// error, identifier count is ambiguous
}
int main()
{
increment();
cout<<"count= "<<count<<endl;
return 0;
}
解决办法: 使用命名机制来避免命名冲突,这里count既可以是程序中全局变量count,也可能是std::count
,因此引起歧义,导致出错。
1) 尽量少用directive方式来引用命名空间:(directive方式即using namespace std;)
取而代之,使用use std::cout,引用命名空间的成员,而不是将其置为后续名字的默认命名空间。
#include <iostream>
using std::cout;//使用命名空间一个名字
using std::endl;
int count = 0;
int increment()
{
return ++count;
}
int main()
{
increment();
cout<<"count= "<<count<<endl;
return 0;
}
2) 使用命名空间引用变量,在命名空间中定义变量、函数和类。
#include <iostream>
using namespace std;
namespace global {
int count = 0;//重新定义一个命名空间
}
int increment()
{
return ++global::count;
}
int main()
{
increment();
cout<<"count= "<<global::count<<endl;
return 0;
}