2

我有一个 MyList 类,它覆盖<<操作员以便能够将自身记录到控制台:

class MyList {
public:
    vector<int> *numbers;
};
ostream& operator<<(ostream& os, MyList& l);

执行:

ostream& operator<<(ostream& os, MyList& l) {
    for (int i = 0; i < l.numbers->size(); i++) {
        os << l.numbers->at(i);         
    }
    return os;
}

在另一个类中,我有一个 MyList 类型的成员变量,我无法将它打印到控制台。有趣的是,本地 MyList 变量可以正常工作:

class A {
public:
    MyList list;
    void someMethod() const;
};

执行:

void A::someMethod() const {
    MyList local;
    // Set up local list.
    cout << "Local:" << local; // OK!
    cout << "Member:" << list; // ERROR!
}

这是错误消息:

Invalid operands to binary expression ('basic_ostream<char,
std::__1::char_traits<char>>' and 'const MyList')

Xcode 的自动修复建议参考list

cout << "Member:" << &list;

这将编译,但(显然)它打印的地址list而不是我的内容。我不明白这两个变量在操作员方面有什么区别<<。有人能解释一下吗?

4

2 回答 2

6

我不认为这是您的真实代码,但这是我的猜测:

ostream& operator<<(ostream& os, const MyList& l)
//                                 |
//                             note const

要么是那个,要么是一些非常愚蠢的东西,比如忘记尾随;

class A {
public:
    MyList list;
    void someMethod();
};  // <------- here
于 2012-11-23T00:32:21.637 回答
2

看来,您const在几个地方省略了 a :就目前而言,您的代码应该没问题。但是,如果您有const成员函数,则成员是const并且您不能将非const引用绑定到const对象。因此,输出运算符通常被声明为将const&第二个参数作为第二个参数:

std::ostream& operator<< (std::ostream& os, MyList const& l) {
    ...
}
于 2012-11-23T00:34:18.217 回答