为什么以下代码会出现此错误:
对'wstring'的引用含糊不清; i = wstring(ws);
我没有任何其他名为wstring
的函数来引起歧义。
int wstring(string &act)
{
int i=0;
vector<int> hash;
while(act[i++]!='\0')
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;
}
答案 0 :(得分:1)
在代码的开头,您有using namespace std
吗?因为如果是这样,呼叫是模糊的。您可以通过以下方式解决问题:
i = ::wstring(ws);
答案 1 :(得分:0)
namespace std
与std::basic_string<wchar_t>
的typedef同名(即std::wstring
)。您有名称冲突,因为编译器不知道您是否将wstring(ws)
视为std::wstring
对象或函数调用的强制转换表达式。这就是为什么,不建议使用using namespace std
,以及为什么为全局名称中具有相似名称的对象赋予名称会导致歧义。
答案 2 :(得分:0)
我假设你也在文件的顶部
#include <string>
using namespace std;
这是你对wstring的模糊调用存在的地方。 wstring是在字符串中声明的类型,编译器无法判断您是否表示函数wstring,或者您是否要创建wstring类型的对象并将其转换为int。