我正在尝试创建自定义<<
运算符,但我的编译器会抛出此错误:invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'const char *')
。
这是我的代码:
inline std::ostream & operator<<(std::ostream &stream, String &string) {
return stream << string.toCharArray();
}
这是我的String
课程:
class String {
private:
char *content;
int size;
void init();
public:
String();
String(const char *content);
~String();
const char *toCharArray();
String operator + (String append);
String operator + (const char *append);
void append(const char *string);
};
inline std::ostream & operator<<(std::ostream &stream, String &string) {
return stream << string.toCharArray();
}
测试示例:
using namespace std;
int main(int argc, char **argv) {
String *test = new String("test");
cout << *test << endl;
cout << (*test + "bb").toCharArray() << endl;
delete test;
return 0;
}
有什么问题?
感谢。
答案 0 :(得分:3)
因为运算符&lt;&lt;()将字符串参数作为非const引用,所以传递的对象必须是l值。但它不是。您正在尝试传递一个字符串文字,其中(可能)将转换为String的临时实例,但临时文件不能是l值。
如果将String引用参数更改为const引用,它应该可以工作。