为什么下面的代码给出这个错误:
对' wstring '的引用有歧义;
我没有任何其他命名为wstring
的函数来引起歧义。
int wstring(string &act)
{
int i=0;
vector<int> hash;
while(act[i++]!=' ')
if(act[i]=='#')
{
hash.push_back(i);
cout<<i<<endl;
}
return i;
}
int main()
{
int cases, i;
string ws;
cin>>cases;
while(cases--)
{
getline(cin, ws);
i = wstring(ws);
cout<<i;
}
return 0;
}
在代码的开头,是否有using namespace std
?因为如果是这样,调用就有歧义。您可以通过以下命令修复:
i = ::wstring(ws);
namespace std
与std::basic_string<wchar_t>
(即std::wstring
)的类型定义名称相同。您会遇到名称冲突,因为编译器不知道您是将wstring(ws)
表示为std::wstring
对象的强制转换表达式还是函数调用。这就是为什么不推荐使用using namespace std
,以及为什么给全局命名空间中具有相似名称的对象命名会导致歧义的原因。
我假设你在文件的顶部也有
#include <string>
using namespace std;
这是对wstring存在歧义调用的地方。Wstring是用string声明的类型,编译器无法判断你是指函数Wstring,还是想创建一个Wstring类型的对象并将其转换为int。