Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Особенность C++ в VС++ 8 
:(
    Опции темы
the_priest
Дата 3.2.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Не понимаю вот что. В VC++ 8 я писал класс со следующей структурой:

Код

class CTerm : public CList <CTerm>
{
//...
}


CList -- тот же list из STL, но с некоторыми моими методами.

Когда пытался скомпилировать этот код в VC++ 6 или 7 -- получал ошибку, что класс CTerm при наследовании еще неопределен. Ни forward-объявления класса, ни запись:

Код

class CTerm : public CList <class CTerm>
{
//...
}


не помогли. Кто знает, почему синтаксис VC++ 8 позволяет подобные конструкции, а в ранних версиях этого нет?

P.S. Возвращаюсь к старым версиям, поскольку необходима поддержка single-threaded. Нужные мне библиотеки *.lib скомпилированы именно так...
PM MAIL   Вверх
JackYF
Дата 3.2.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(the_priest @  3.2.2008,  08:12 Найти цитируемый пост)
Кто знает, почему синтаксис VC++ 8 позволяет подобные конструкции, а в ранних версиях этого нет?

Не знаю, почему он позволяет подобные конструкции, потому как не должен. Ты уже начал использовать класс, хотя бы и в наследовании - будь добр, опиши его полностью - вставь полноценный хедер.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
the_priest
Дата 3.2.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



JackYF
Позволяет, однако, и работает такой класс как надо... Самому странно. Дело в том, что мне нужна такая рекурсия. Чтобы объект мог быть списком объектов каких же, как он сам. И элементы списка также могли быть списками. Как это сделать по-другому, ума не приложу...
PM MAIL   Вверх
maxim1000
Дата 3.2.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



хм... вообще-то я встречал немало таких использований шаблонов (у Александреску, помнится), так что подозреваю, что это всё-таки корректно с точки зрения C++ (надо будет почитать)
P.S.
к тому же VC++8 ближе к стандарту, чем 6, ИМХО

Это сообщение отредактировал(а) maxim1000 - 3.2.2008, 12:57


--------------------
qqq
PM WWW   Вверх
JackYF
Дата 3.2.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(maxim1000 @  3.2.2008,  11:53 Найти цитируемый пост)
что это всё-таки корректно с точки зрения C++ (надо будет почитать)

Смотри: он использует CList<CTerm>, который наследник std::list<CTerm>
Список использует не указатели на CTerm, а экземпляры класса, значит, компилятор нуждается в определении класса CTerm, чтобы понять, что же ему нужно имплементировать...

Цитата(maxim1000 @  3.2.2008,  11:53 Найти цитируемый пост)
к тому же VC++8 ближе к стандарту, чем 6

Да. А ближе ли, чем VC++ 7?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizzy1984
Дата 4.2.2008, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



По-хорошему первый стандарт c++ относится к 1998 году, 98 же студия была создана в 97-м году и его поддерживать не могла. Она поддерживала свой набор правил похожих на стандарт 98-го года.
PM MAIL   Вверх
the_priest
Дата 8.2.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Кстати, в C++Builder такой код компилируется без ошибок.

И еще. Пример можно упростить таким образом:

Код

class CTerm
{
    list <class CTerm> aTerms;
};


Т.е. внутри объекта будет список объектов этого же класса. В VC++ 8 такой код компилируется, в более ранних средах -- нет. Причина в различии стандартов?

Кое-что еще. Если заменить list на vector, то все работает. По крайней мере на VC++ 7. Видимо, все дело в особенностях класса list из STL, а не в языке.

Это сообщение отредактировал(а) the_priest - 8.2.2008, 12:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.2127 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.