У меня есть объект класса Deck, который содержит динамически распределенный массив указателей на объекты другого класса, PlayingCard. Я пытаюсь перегрузить оператор << (как друг класса Deck) для итеративного вывода деталей каждой карты в объекте Deck. В настоящее время определение перегрузки выглядит так: </p>
ostream& operator<< (ostream& out, const Deck& d)
{
PlayingCard** pCards = d.getPlayingCards();
for(int i = 0; i < d.getTotalCards(); ++i)
{
out << pCards[i] << endl;
// the << operator is also overloaded in the PlayingCard class to take PlayingCard objects as arguments.
// the overload in the PlayingCard class definitely works.
}
return out;
}
При попытке создать объект Deck и вывести информацию о его карточке, он выводит список адресов памяти, а не фактические данные, поэтому я думаю, мне нужно разыменовать pCards [i]. Однако, когда я пытаюсь это сделать, вывод становится мусором, и я в конечном итоге получаю нарушение прав доступа в отладчике. Я перепробовал все следующие комбинации, но все они вызывают проблемы во время компиляции или во время выполнения:
*pCards[i], pCards[i]*, (*pCards[i]), *(pCards[i])
Это просто неправильный синтаксис для разыменования указателя, который находится внутри массива, или есть что-то более глубокое, чего я здесь не понимаю? Как я могу переписать этот код, чтобы программа выводила фактические данные, хранящиеся в этих объектах PlayingCard, а не только адреса памяти?