错误:类型' char&'的非const引用的初始化无效来自临时的#char;'

时间:2017-01-12 09:20:53

标签: c++ string reference

  

错误:类型' char&'的非const引用的初始化无效来自临时的#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 ++程序中调用该函数的方法相同,工作正常,所以我无法理解为什么它不能在这个中工作。

非常感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:0)

可能不是最好的方法,但我通过改变我的功能来解决错误。

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

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

感谢所有提交建议的人

答案 1 :(得分:-2)

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

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