Jérémy Pouyet
Jérémy Pouyet

Reputation: 2019

c++ operator overloading << on Array pointers

I have two classes, Pony and Bear which inherits from an Animal Abstract Class.

I have made an Animal Array which contains one Pony and one Bear :

Animal **arr = new Animal * [2];
arr[0] = new Pony("pony name");
arr[1] = new Bear("bear name");

The argument to Pony and Bear is it name. I then want to print the Animal name by ovearloading the << operator. something like

cout << arr[0];  // Print something like : "I am Pony/Bear Name !"

But my test to overload fail... I try to do something like

ostream & operator<<(ostream& os, Animal &a);

But It do not detect the overload when I compile...

How is it possible to overload the << operator in my array of pointers ?

Full error after the test *arr[0]

main.cpp: In function ‘Object** MyUnitTests()’:
main.cpp:20:22: error: no match for ‘operator<<’ in ‘std::cout << * * obj’
main.cpp:20:22: note: candidates are:
In file included from /usr/include/c++/4.7/iostream:40:0,
             from Object.hh:14,
             from main.cpp:11:

And then 200 lines of errors comming from std::cout (they disapears if I remove the * on the arr[0]).

Upvotes: 0

Views: 411

Answers (1)

Joseph Mansfield
Joseph Mansfield

Reputation: 110658

arr[0] is a pointer, so you'll need to perform indirection to be able to pass it to that operator<< overload:

cout << *arr[0];

You're using new much more than you should be. I'll let you off with the animals themselves because you need polymorphism (although you should use smart pointers instead), but the array of pointers does not need to be dynamically allocated:

Animal* arr[2];

Upvotes: 2

Related Questions