三行代码  ›  专栏  ›  技术社区  ›  Praveen Sinha

ostream<<未调用运算符

  •  1
  • Praveen Sinha  · 技术社区  · 3 月前

    我创建了一个具有一些基本属性的类Animal,并添加了一个无数据构造函数。 我也重载了ostream操作符来打印属性。

    动物cpp

    #include<bits/stdc++.h> 
    using namespace std;
    
    class Animal {
        string name;
        int action;
    public: 
        Animal() {
            name = "dog";
            action = 1;
        }
        ostream& write(ostream& os) {
            os << name << "\n" << action << "\n";
            return os;
        }
        friend ostream& operator<<(ostream& os, Animal &animal) {
            return animal.write(os);
        }
    };
    
    
    
    int main() {
        cout << "Animal: " << Animal() << "\n";
    }
    

    然而,我得到的主要错误是二进制表达式ostream和Animal的无效操作数。 如果我申报动物,然后打电话给法院,效果很好。但是如何让它像这样工作(同时初始化和cout)?

    1 回复  |  直到 3 月前
        1
  •  3
  •   songyuanyao    3 月前

    第二个参数 operator<< 被宣布为 Animal & ; Animal() 是临时的,不能绑定到对非常量的左值引用。

    您可以将类型更改为 const Animal & ; 临时可以绑定到对const的左值引用。(那么 write 需要标记为 const 也是。)

    class Animal {
        string name;
        int action;
    public: 
        Animal() {
            name = "dog";
            action = 1;
        }
        ostream& write(ostream& os) const {
            os << name << "\n" << action << "\n";
            return os;
        }
        friend ostream& operator<<(ostream& os, const Animal &animal) {
            return animal.write(os);
        }
    };