类型'const char [8]'和'const char *'的操作数无效,二进制'operator +

时间:2016-09-23 15:59:26

标签: c++ fopen

我正在尝试写一个像这样的Fopen语句:

FILE *fp;
fp = fopen("client." + receiver->get_identifier().c_str() + ".vol", "a+");

其中receiver-> get_identifier()返回一个字符串。但是,我收到了标题中的错误。我读了here这个问题但是没有运气,因为fopen的第一个参数是const char *。我需要更改什么来编译它?

2 个答案:

答案 0 :(得分:3)

receiver->get_identifier().c_str()

返回const char*,而不是std::string,因此operator+无法启动(其中一个参数必须为std::string)。删除c_str()并使用std::string::c_str()在结尾处进行转换应该可以解决问题

fopen(("client." + receiver->get_identifier() + ".vol").c_str(), "a+");

这是因为您有const char*std::stringoperator+可以使用。

如果您可能想知道为什么无法为operator+定义const char*,那是因为C ++不允许对基本类型进行运算符重载;至少一个参数必须是用户定义的类型。

答案 1 :(得分:2)

尝试将第一个参数更改为

(string("client.") + receiver->get_identifier() + ".vol").c_str()

这将使用C-Style字符串which can be done添加std::string个对象,并且只在末尾添加字符指针(通过.c_str())。您的代码现在尝试添加C样式字符串,这是不可能的。