覆盖operator << for console output对成员变量不起作用

Jaw*_*wap 2 c++ pointers iostream operator-overloading ostream

我有一个类MyList,它覆盖了<<操作符,以便能够将自己登录到控制台:

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

执行:

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

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

class A {
public:
    MyList list;
    void someMethod() const;
};
Run Code Online (Sandbox Code Playgroud)

执行:

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

这是错误消息:

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

Xcode的自动修复建议参考list:

cout << "Member:" << &list;
Run Code Online (Sandbox Code Playgroud)

这将编译,但(显然)它打印的地址list而不是我的内容.我不明白这两个变量在<<运算符方面的区别.有人可以解释一下吗?

Luc*_*ore 6

我不认为这是你真正的代码,但这是我的猜测:

ostream& operator<<(ostream& os, const MyList& l)
//                                 |
//                             note const
Run Code Online (Sandbox Code Playgroud)

无论是那种,还是像忘记尾随的愚蠢的东西;:

class A {
public:
    MyList list;
    void someMethod();
};  // <------- here
Run Code Online (Sandbox Code Playgroud)