dynamic_cast
От: flax Беларусь  
Дата: 05.02.04 13:59
Оценка:
Проблема : if(interpreter_cast) выбрасывает ошибку
-----------------------------
есть абстрактный класс ABSFile
от него порождены File и Directory.
есть класс Iterator по ABSFile.

Iterator* Directory::creatIterator() {return new Iterator( this )}
AbsFile* Iterator::currentItem() { return list[index]; }
-----------------------------
Вопрос1 :
it = static_cast<Directory*>(it->currentItem())->createIterator();

работает. Даже на файл не ругается и приводит к типу.

хочу проверить тип
if (Directory* d = dynamic_cast<Directory*>(it->currentItem())){
...
}

но dynamic всегда выбрасывает ошибку.
------------------------------------------
Вопрос 2:
Как сделать, чтобы для получения детей директории, не надо было испольовать приведение типов, и вместе с тем, не портить( не вносить доп. методы) в абстактный класс ABSFIle



Спасибо





Спасибо.
Re: dynamic_cast
От: Вадим Никулин Россия Здесь
Дата: 05.02.04 14:10
Оценка:
Здравствуйте, flax, Вы писали:

F>Проблема : if(interpreter_cast) выбрасывает ошибку

F>-----------------------------
F>есть абстрактный класс ABSFile
F>от него порождены File и Directory.
F>есть класс Iterator по ABSFile.

1. А хоть одна виртуальная функция есть?
2. А включена ли поддержка RTTI?
Re[2]: dynamic_cast
От: flax Беларусь  
Дата: 05.02.04 14:17
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Здравствуйте, flax, Вы писали:


F>>Проблема : if(interpreter_cast) выбрасывает ошибку

F>>-----------------------------
F>>есть абстрактный класс ABSFile
F>>от него порождены File и Directory.
F>>есть класс Iterator по ABSFile.

ВН>1. А хоть одна виртуальная функция есть?

ВН>2. А включена ли поддержка RTTI?

1.В ABS все виртуальное (кроме констр. конечно )
2. а где ее включать?
Re[3]: dynamic_cast
От: Lorenzo_LAMAS  
Дата: 05.02.04 14:22
Оценка:
F>2. а где ее включать?

А чем компилишь?
Of course, the code must be complete enough to compile and link.
Re[4]: dynamic_cast
От: flax Беларусь  
Дата: 05.02.04 14:26
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

F>>2. а где ее включать?


L_L>А чем компилишь?


.Net
Re[5]: dynamic_cast
От: Lorenzo_LAMAS  
Дата: 05.02.04 14:29
Оценка:
Вроде так

Project->Properties
C++
и т.д. там есть что-то про Enable RTTI
Of course, the code must be complete enough to compile and link.
Re[6]: dynamic_cast
От: flax Беларусь  
Дата: 05.02.04 14:53
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Вроде так


L_L>Project->Properties

L_L>C++
L_L>и т.д. там есть что-то про Enable RTTI

Огромное спасибо . А то бился-бился
Thanks
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.