为什么我的程序对wstring错误提出了模糊的引用?

时间:2014-08-24 16:00:14

标签: c++

为什么以下代码会出现此错误:

  

对'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;
}

3 个答案:

答案 0 :(得分:1)

在代码的开头,您有using namespace std吗?因为如果是这样,呼叫是模糊的。您可以通过以下方式解决问题:

i = ::wstring(ws);

答案 1 :(得分:0)

namespace stdstd::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。