我正在尝试写一个像这样的Fopen语句:
FILE *fp;
fp = fopen("client." + receiver->get_identifier().c_str() + ".vol", "a+");
其中receiver-> get_identifier()返回一个字符串。但是,我收到了标题中的错误。我读了here这个问题但是没有运气,因为fopen的第一个参数是const char *。我需要更改什么来编译它?
答案 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::string
,operator+
可以使用。
如果您可能想知道为什么无法为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样式字符串,这是不可能的。