Это мой первый пост, размещенный здесь в SO, но я использовал ответы и помог здесь некоторое время.
Я сейчас работаю над простой карточной игрой, которую я планировал в течение нескольких лет. В конечном итоге это будет мой старший проект для школы (не прося никого делать домашнее задание для меня!)
Сейчас я испытываю проблему, пытаясь отобразить содержимое списка на консоль через пару классов.
for(std::list<Card>::iterator it = Hand.begin(); it != Hand.end(); it++)
std::cout<< *it.GetName();
Я пытаюсь выяснить, если линия
std::cout<< *it.GetName();
будет действительным или нет. У меня проблемы с работой, и у меня нет возможности попробовать что-то прямо сейчас. Прежде чем я должен был отказаться от проекта сегодня утром, у меня были некоторые ошибки компиляции, которые заставляли меня поверить, что мне нужно перегрузить оператор <<, который я пробовал, и в результате почему-то получаю пару ссылок на ошибки.
Я занимался большей частью дня, но не сталкивался с ситуациями, которые выпрыгивали на меня как правильное решение, но этот маленький блок - это то, что я нашел, что кажется наиболее правильным для того, что я пытаюсь делать.
Будет ли этот блок печатать имена объектов карты, хранящихся в списке рук, как сейчас? Да, у класса карты есть функция GetName(), и она объявлена правильно.
*it.getName();
такой же как
*(it.getName());
так как .
и вызов функции имеют более высокий приоритет, чем унарный *
. Таким образом, компилятор ищет член getName
в классе std::list<Card>::iterator
, но его нет: getName
(я предполагаю) член Card
, и итераторы не имеют отношения наследования или пересылки к их объекту.
Вы, вероятно,
(*it).getName();
или, что то же самое,
it->getName();
(Оператор arrow ->
является просто сокращением для разыменования, а затем именованием члена.)
it->GetName()
. (На самом деле, в C ++ 11 все становится еще лучше:for (Card& card : Hand) { std::cout << card.GetName(); }
.)