Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамическое приведение типов 
:(
    Опции темы
Волод
Дата 30.8.2005, 12:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Опять не компилируется!!!
В книге Лафоре есть вот такой пример кода:
Код

//dyncast2.cpp
//Тестирование динамического приведения типов
//RTTI должен быть включен
#include <iostream>
#include <typeinfo>          //для dynamic_cast
using namespace std;
///////////////////////////////////////////////////////////
class Base
  {
  protected:
    int ba;
  public:
    Base() : ba(0)
      {  }
    Base(int b) : ba(b)
      {  }    
    virtual void vertFunc()  //для нужд dynamic_cast
      {  }
    void show()
      { cout << "Base: ba=" << ba << endl; }
  };
///////////////////////////////////////////////////////////
class Derv : public Base
  {
  private:
    int da;
  public:
    Derv(int b, int d) : da(d)
      { ba = b; }
    void show()
      { cout << "Derv: ba=" << ba << ", da=" << da << endl; }
  };
////////////////////////////////////////////////////////////////
int main()
  {
  Base* pBase = new Base(10);     //указатель на Base
  Derv* pDerv = new Derv(21, 22); //указатель на Derv

  //приведение к базовому типу: восхождение  по дереву –
  //указатель поставлен на подобъект Base класса Derv
  pBase = dynamic_cast<Base*>(pDerv);
  pBase->show();                  //"Base: ba=21"

  pBase = new Derv(31, 32);       //обычное нисходящее
   //приведение типов -- pBase должен указывать на Derv)
  pDerv = dynamic_cast<Derv*>(pBase);
  pDerv->show();                  //"Derv: ba=31, da=32"
  return 0;
  }

Компилятор такой код пропускает, хотя и выдает предупреждение на строке
pDerv = dynamic_cast<Derv*>(pBase);
, а вот во время исполнения программы, именно на этой строке программа вылетает…
В чем причина? Использую VC++ 6 SP6

  Вверх
zhgutov
Дата 30.8.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А у меня все работает. Компиляторы Intel C++ 8.1, VC++ 7. Старый компилятор имел свойство выдавать кучу глюков. Например при написании шаблона функции сортировки он мне выдал внутреннюю ошибку! Не исключено, что дело именно в нем.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Void
Дата 30.8.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата
Компилятор такой код пропускает, хотя и выдает предупреждение на строке
pDerv = dynamic_cast<Derv*>(pBase);

Скорее всего, предупреждение содержало в себе вполне четкое сообщение о том, что не включен RTTI и нужно компилировать код с соотвествующим ключом. Для 7-ки это -GR, для 6-ки, думаю, то же самое.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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