Russian Qt Forum
Ноябрь 23, 2024, 14:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: приведение встроенного типа  (Прочитано 3095 раз)
alex
Гость
« : Декабрь 12, 2012, 23:40 »

сабж не компилится:
Код
C++ (Qt)
 
istream *str= new ifstream;
str= dynamic_cast<ifstream *>(str);
str->open("foo_file.txt"); //<----------ERROR
 
 
попробовал reinterpret_cast , ошибка не исчезла.
PS файл foo_file существует
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 12, 2012, 23:45 »

str имеет тип istream *, istream не имеет метода open. но вот так сработает: dynamic_cast<ifstream *>(str)->open("foo_file.txt");

да, и этот тип не является встроенным.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alex
Гость
« Ответ #2 : Декабрь 12, 2012, 23:49 »

str имеет тип istream *, istream не имеет метода open. но вот так сработает: dynamic_cast<ifstream *>(str)->open("foo_file.txt");

да, и этот тип не является встроенным.

что значит встроенным?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Декабрь 13, 2012, 00:04 »

встроенным в язык (у тебя ж в заглавии темы фигурирует «встроенного типа»). таковыми являются лишь POD-типы (int, float, char…)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 13, 2012, 09:20 »

Проще и лучше так
Код
C++ (Qt)
std::ifstream strm("foo_file.txt");
 
А если извращаться, то так
Код
C++ (Qt)
istream * istr = new ifstream;
ifstream * strm = dynamic_cast<ifstream *>(istr);
strm->open("foo_file.txt");
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 22.