[英]invalid initialization of non-const reference of type 'const char*&' from an rvalue of type 'const 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.