试图创建自定义<< operator c ++

时间:2015-02-06 02:57:02

标签: c++

我正在尝试创建自定义<<运算符,但我的编译器会抛出此错误: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;
}

有什么问题?

感谢。

1 个答案:

答案 0 :(得分:3)

因为运算符&lt;&lt;()将字符串参数作为非const引用,所以传递的对象必须是l值。但它不是。您正在尝试传递一个字符串文字,其中(可能)将转换为String的临时实例,但临时文件不能是l值。

如果将String引用参数更改为const引用,它应该可以工作。