错误:传递 std::string 时需要左值作为一元"&"操作数

error: lvalue required as unary ‘&’ operand when passing std::string

本文关键字:一元 操作数 string std 传递 错误      更新时间:2023-10-16

我正在编写c++代码,我正在使用结构体。

struct Info_t {
    cass_int64_t internal_id;
    cass_double_t amount;
    std::string client;
}

我在函数中传递一个指向这个结构体的指针,我像这样使用它

get_string(row_by_name(row, "cl"), &info->client.c_str());

但是编译器报错"*error:左值需要作为一元' & '操作数"

row_by_name的第三个参数应该是const char*,我正在传递一个std::string,我试图用c_str()使它成为char*。怎么了?

要避免错误,只需写入

get_string(row_by_name(row, "cl"), info->client.c_str());

不能应用运算符&到临时对象。这个表达式

info->client.c_str()

已经有类型const char *

然而,不清楚你想要达到什么目的。也许你应该声明相应的参数,例如const std::string &,并传递std::string本身的对象作为参数?

如果相应的形参声明为const char **(虽然这很奇怪),那么在传递实参之前必须声明一个中间变量,例如:

const char *p = info->client.c_str();

并使用表达式&p

将其作为参数传递