我正在尝试将字符串放入字符串 vector 中,如下所示
void Node::set_val(string &val)
{
this->val.push_back(val);
}
但是当我尝试如下调用它时
Obj.set_val("10h;");
我得到以下错误,
error: no matching function for call to 'Node::set_val(const char [5])'
我假设""中的字符串与c++中的string
相同,为什么会出现这样的错误?下面必须更改什么?
最佳答案
您正在通过非常量引用接收 std::string
。非常量引用不能绑定(bind)到右值,例如 "10h;"
,因此您不能将文字传递给该函数。
如果你不打算修改参数,你应该通过常量引用来获取你的参数:
void Node::set_val(const string &val)
// ^^^^^
这样,一个临时的 std::string
将从您的 const char[5]
构造并传递给 set_val
。
您可以通过按值接收 string
并将其移动
到 vector
中来改进它:
void Node::set_val(string val)
{
this->val.push_back(std::move(val));
}
这可以防止您制作一些不必要的拷贝。
关于c++ - vector 中的 STL Push_back 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800171/