Russian Qt Forum

Программирование => С/C++ => Тема начата: alex от Декабрь 12, 2012, 23:40



Название: приведение встроенного типа
Отправлено: 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 существует


Название: Re: приведение встроенного типа
Отправлено: kambala от Декабрь 12, 2012, 23:45
str имеет тип istream *, istream не имеет метода open. но вот так сработает: dynamic_cast<ifstream *>(str)->open("foo_file.txt");

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


Название: Re: приведение встроенного типа
Отправлено: alex от Декабрь 12, 2012, 23:49
str имеет тип istream *, istream не имеет метода open. но вот так сработает: dynamic_cast<ifstream *>(str)->open("foo_file.txt");

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

что значит встроенным?


Название: Re: приведение встроенного типа
Отправлено: kambala от Декабрь 13, 2012, 00:04
встроенным в язык (у тебя ж в заглавии темы фигурирует «встроенного типа»). таковыми являются лишь POD-типы (int, float, char…)


Название: Re: приведение встроенного типа
Отправлено: Igors от Декабрь 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");