Сначала я хочу прояснить, что это вопрос, основанный на домашнем задании. В таком случае я хочу «понимать», где мои мысли идут наперекосяк, а не просто получить ответ;)
У меня есть класс RegistrationList, производный от QList, например:
class RegistrationList : public QList<Registration *>
Объект Registration имеет два дочерних класса, поэтому список RegistrationList содержит указатели на объекты исходного класса Registration, а также двух его дочерних элементов:
class GuestRegistration : public Registration
и
class StudentRegistration : public Registration
класс RegistrationList должен иметь такой прототип функции:
void displayList();
Что нужно сделать этой функции, так это вызвать функцию с именем
QString toString();
во всех объектах списка.
Теперь это то, что у меня есть для реализации
void displayList();
функция-член класса RegistrationList:
void RegistrationList::displayList()
{
QTextStream cout(stdout);
cout << "\nHere follows a list of all registrations:";
cout << "\n=========================================\n";
foreach(Registration *r, this) { r->toString(); }
}
Но компилятору это совсем не нравится. Я вижу это так: я хочу перебрать список, содержащий коллекцию объектов, подобных регистрации. Каждый из этих объектов имеет функцию-член, называемую
toString();
распечатать довольно отформатированную информацию. Это работает на 100%. Если я закомментирую строку foreach, код скомпилируется без проблем. Единственное, о чем я могу думать, это то, что foreach не любит иметь
this
как его второй параметр.
Это не обязательно, что я должен использовать foreach, но это будет бесконечно беспокоить меня, если я не смогу выяснить, почему это не работает, хотя «кажется», что так и должно быть...