Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的程序对wstring错误的引用不明确?_C++ - Fatal编程技术网

C++ 为什么我的程序对wstring错误的引用不明确?

C++ 为什么我的程序对wstring错误的引用不明确?,c++,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<<

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

对“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;
}
int wstring(字符串和动作)
{
int i=0;
向量散列;
while(act[i++]!='\0')
如果(动作[i]='#')
{
hash.push_back(i);

cout在代码的开头,是否有
使用命名空间std
?因为如果是这样,调用是不明确的。您可以通过以下方式修复它:

i = ::wstring(ws);

namespace std
std::basic_string
(即
std::wstring
)的typedef具有相同的名称。存在名称冲突,因为编译器不知道您指的是
wstring(ws)
作为
std::wstring
对象或函数调用的强制转换表达式。这就是为什么不建议使用命名空间std
的原因,也是为什么在全局命名空间中为具有类似名称的对象命名会引起歧义的原因。

我假设您的文件顶部也有

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;
}
#include <string>
using namespace std;
#包括
使用名称空间std;

这就是对wstring的不明确调用存在的地方。是以字符串形式声明的类型,编译器无法判断您是指函数wstring,还是要创建wstring类型的对象并将其转换为int。

,这将污染全局命名空间,并且非常复杂discouraged@MarcoA.你指的是提问者,不是这个答案,对吗是的,没错。我想答案应该是正确的。你的程序是否有
#include
使用名称空间std;
在你没有显示的地方?因为在
中定义了
std::wstring
类型,错误在你修剪的部分,投票关闭。谢谢…我有#include并使用名称空间std顶端…出了什么问题。。。