![]() |
|
|
![]()
|
|
| the_priest |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.2.2008 Репутация: нет Всего: нет |
Не понимаю вот что. В VC++ 8 я писал класс со следующей структурой:
CList -- тот же list из STL, но с некоторыми моими методами. Когда пытался скомпилировать этот код в VC++ 6 или 7 -- получал ошибку, что класс CTerm при наследовании еще неопределен. Ни forward-объявления класса, ни запись:
не помогли. Кто знает, почему синтаксис VC++ 8 позволяет подобные конструкции, а в ранних версиях этого нет? P.S. Возвращаюсь к старым версиям, поскольку необходима поддержка single-threaded. Нужные мне библиотеки *.lib скомпилированы именно так... |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
Не знаю, почему он позволяет подобные конструкции, потому как не должен. Ты уже начал использовать класс, хотя бы и в наследовании - будь добр, опиши его полностью - вставь полноценный хедер. |
|||
|
||||
| the_priest |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.2.2008 Репутация: нет Всего: нет |
JackYF
Позволяет, однако, и работает такой класс как надо... Самому странно. Дело в том, что мне нужна такая рекурсия. Чтобы объект мог быть списком объектов каких же, как он сам. И элементы списка также могли быть списками. Как это сделать по-другому, ума не приложу... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
хм... вообще-то я встречал немало таких использований шаблонов (у Александреску, помнится), так что подозреваю, что это всё-таки корректно с точки зрения C++ (надо будет почитать)
P.S. к тому же VC++8 ближе к стандарту, чем 6, ИМХО Это сообщение отредактировал(а) maxim1000 - 3.2.2008, 12:57 -------------------- qqq |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
Смотри: он использует CList<CTerm>, который наследник std::list<CTerm> Список использует не указатели на CTerm, а экземпляры класса, значит, компилятор нуждается в определении класса CTerm, чтобы понять, что же ему нужно имплементировать... Да. А ближе ли, чем VC++ 7? |
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
По-хорошему первый стандарт c++ относится к 1998 году, 98 же студия была создана в 97-м году и его поддерживать не могла. Она поддерживала свой набор правил похожих на стандарт 98-го года.
|
|||
|
||||
| the_priest |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.2.2008 Репутация: нет Всего: нет |
Кстати, в C++Builder такой код компилируется без ошибок.
И еще. Пример можно упростить таким образом:
Т.е. внутри объекта будет список объектов этого же класса. В VC++ 8 такой код компилируется, в более ранних средах -- нет. Причина в различии стандартов? Кое-что еще. Если заменить list на vector, то все работает. По крайней мере на VC++ 7. Видимо, все дело в особенностях класса list из STL, а не в языке. Это сообщение отредактировал(а) the_priest - 8.2.2008, 12:16 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |