У меня есть два класса: Pony
и Bear
, который наследует от Animal
Абстрактный класс.Перегрузка оператора C++ << на указатели массива
Я сделал Animal
массив, который содержит один Pony
и один Bear
:
Animal **arr = new Animal * [2];
arr[0] = new Pony("pony name");
arr[1] = new Bear("bear name");
Аргументом Пони и медведь это имя. Затем я хочу напечатать имя животного, выполнив команду <<
. что-то вроде
cout << arr[0]; // Print something like : "I am Pony/Bear Name !"
Но мой тест перегружать неудачу ... Я пытаюсь сделать что-то вроде
ostream & operator<<(ostream& os, Animal &a);
Но он не обнаруживает перегрузку, когда я компилирую ...
Как возможно ли перегрузить оператор <<
в моем массиве указателей?
Полная ошибка после испытания *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:
А затем 200 строк ошибок пришедшего с станд :: соиЬ (они disapears если я удалить * на обр [0]).
Какой тип 'обр [0] '? –
Его массив указателей, поэтому 'cout << arr [0];' будет печатать указатель dir, jus try 'cout << * arr [0];' – Netwave
Не принимайте 'a' по неконстантной ссылке. Если вы меняете его, не делайте этого. – chris