Сначала я хочу прояснить, что это домашний вопрос. В таком случае я хочу «понять», где мое мышление становится бесполезным, а не просто получить ответ;)
У меня есть класс 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, но это не даст мне покоя, если я не смогу понять, почему он не работает, хотя "кажется" так, как будто он должен ...