繁体   English   中英

错误:从“char”类型的临时对象初始化“char&”类型的非常量引用无效

[英]error : invalid initialization of non-const reference of type 'char&' from a temporary of type 'char'

错误:从“char”类型的临时对象初始化“char&”类型的非常量引用无效

我在很多帖子中都看到了上面的错误,但我尝试的一切都没有解决。

我有以下功能:

vector<string> splitString(const string& str, const char& ch)
{
    string next;
    vector<string> result;

    for (string::const_iterator it = str.begin(); it != str.end(); it++)
    {
        if (*it == ch)
        {
            if (!next.empty())
            {
                result.push_back(next);
                next.clear();
            }
        }
        else
        {
            next += *it;
        }
    }

    if (!next.empty())
    {
        result.push_back(next);
    }

    return result;
}

它接受一个字符串和一个字符,并根据给定的字符拆分字符串。 我还有以下代码行来调用该函数:

int main(int argc, char*argv[])
{
     string value = "OK,OK,OK,FAULT,OK"
     vector<string> texts = splitString(value, ',');

     //Do stuff with "texts" here
}

编辑这是我的主函数中的代码

我有相同的函数,以及在我编写的另一个 C++ 程序中调用该函数的相同方式,该程序运行良好,所以我不明白为什么它在这个程序中不起作用。

任何帮助将不胜感激。 谢谢

可能不是最好的方法,但我通过更改函数解决了错误。

对于那些感兴趣的人,我现在有:

vector<string> split(std::string string, std::string del)
{
    char* cstr = const_cast<char*>(string.c_str());
    char* current;
    std::vector<std::string> arr;
    current = strtok(cstr, del.c_str());
    while (current != NULL) 
    {
         arr.push_back(current);
         current = strtok(NULL, del.c_str());
    }

    return arr;
}

感谢所有提交建议的人

我相信这是因为您将字符串和字符都作为非常量引用传递。 尝试将 main 的内容更改为:

 const string value = "OK,OK,OK,FAULT,OK";
 const char comma = ',';
 vector<string> texts = splitString(value, comma);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM