1

I have created a class Animal with some basic properties and added a no data constructor. I have overloaded the ostream operator as well to print the properties.

Animal.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"; } 

However I am getting error in the main that invalid operands to binary expression ostream and Animal. It works fine if I declare Animal and then call the cout. But how to make it work like this (initialize and cout at the same time) ?

1

1 Answer 1

5

The 2nd parameter of operator<< is declared as Animal &; Animal() is a temporary and can't be bound to lvalue-reference to non-const.

You can change the type to const Animal &; temporary could be bound to lvalue-reference to const. (Then write needs to marked as const too.)

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); } }; 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.