| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > типы перемннных 2 |
| Автор: MsLive 6.10.2008, 18:19 | ||||
| Здравствуйте! Недавно возник такой вопрос: Как мне включить класс в проект, который использует неопределенный тип данных(и таких данных много) например:
в другом файле
Любая попытка включить этот класс без #include не была успешной(компилятор писал ошибку связанную с неизвестным типом) З.Ы. Если предполагать что компьютер не знает как с ними работать, тогда почему бы не писать ошибку когда я именно использую неизвестный тип, а не получаю доступ к известному классу с известном типом- и даже не к внутреннему классу этого класса(потомку)? Заранее спасибо! |
| Автор: Lazin 6.10.2008, 18:38 |
| ты бы книжку почитал сначала, хотя-бы по Си... |
| Автор: MsLive 6.10.2008, 19:23 | ||
Что вы имеете ввиду? |
| Автор: J0ker 6.10.2008, 19:30 | ||||
|
| Автор: MsLive 6.10.2008, 20:29 | ||||||
|
| Автор: Lin07 6.10.2008, 23:54 | ||||
потому что компилятор не знает ,что за обьект ,если вы ему о нем не расскажете... как он может знать что это такое ,если вы ему о обьекте не слова не говорите J0ker +1 |
| Автор: Lazin 7.10.2008, 07:58 | ||
он (компилятор) проиндексирует жесткий диск компьютера Добавлено через 42 секунды и найдет нужный заголовочный файл, где-бы он не был |
| Автор: tier2 7.10.2008, 09:57 | ||||
|
| Автор: MsLive 7.10.2008, 10:41 | ||
Так об этом я и говорил: Если я обращаюсь к неизвестному объекту- то писать ошибку, а если не обращаюсь- не писать. Или это как-то связанно с адресом памяти в классе? И почему даже если в классе есть указатель с неопределенным типом то я тоже должен это обозначивать? |
| Автор: bsa 7.10.2008, 11:20 | ||||
Потому что компилятор не знает, что ты пытаешься сделать. Может это у тебя не тип, а объект, функция, переменная... Что делать то?!? Он не знает. Вот и ругается. Если тебе нужен указатель или ссылка на объект неизвестного типа, то ты должен сделать предопределение этого типа:
Программа во время исполнения не может ругаться на доступ к неизвестному объекту, так как во время ее работы нет понятия типа объекта. Это особенность компилируемых языков (к коим относятся Си и С++), если тебе нужны подобные свойства, то обрати внимание на интерпретируемые (BASIC, Python и пр.) |
| Автор: MsLive 7.10.2008, 13:11 | ||||
Я имею ввиду не во время работы,- а во время компиляции проекта.
Если исполняемая функция\класс\объект\структура вызывается то компилятор проверяет наличие обозначения данной переменной в исполняемом классе\файле если ее там нет(в исполняемом файле нет #include, обозначения класса: class temp_obj)- пишет ошибку. И не важно что это функция,класс- компилятор будет понимать: если он вызывает неопознанную инструкцию, он будет давать об этом отсчет (ошибка) (во время компиляции) З.ы. "Что делать то?!? Он не знает. Вот и ругается" - ругаться положено не по пустякам т.е. когда я этот объект вызываю- он дает об этом отсчет, а если не вызываю он дальше компилирует проект. |
| Автор: Lazin 7.10.2008, 13:25 |
| во время компиляции исполняемого файла еще нет, он появится только после успешной компоновки, include - директива, которая говорит компилятору, что нужно вставить текст одного файла в другой. зы RTFM, лучше начни с основ, а то путать исходник с исполняемым файлом как-то совсем грустно... |
| Автор: MsLive 7.10.2008, 13:50 | ||
Про исполняемый файл я разве говорил? |
| Автор: Lazin 7.10.2008, 14:32 | ||
говорил |
| Автор: MsLive 7.10.2008, 14:44 | ||||
Значит вы меня не так поняли. Под словом исполняемый файл я не имел ввиду .exe |
| Автор: EnergoHokum 7.10.2008, 14:50 | ||
Для платформы windows в общем случае исполняемым файлом является PE-файл, и расшифровывается так-же: Portable Executable. Как правило, такому файлу дают расширение exe. А ты что имел в виду? |
| Автор: MsLive 7.10.2008, 15:00 | ||
Я имел ввиду файл(.cpp\.h)/класс который выполняет исполнение неопределенного объекта(в данном случае компилятор должен написать ошибку) з.ы. а как всетаки .ехе расшифровывается?(название) |
| Автор: Fazil6 7.10.2008, 15:08 | ||
"Начал хорошо, не разменивайся на детали, говори главное!", "Да уж!" |
| Автор: Lazin 7.10.2008, 15:29 | ||
непонятно... executable |
| Автор: J0ker 7.10.2008, 20:57 | ||
| патамушта C++ - язык со статической типизацией - типы существуют ТОЛЬКО на этапе компиляции, поэтому компилятору нужно знать как минимум размер объекта определенного типа если данный объект используется как мембер другого объекта если используется указатель на объект или ссылка (являющаяся так-же указателем), то компилятору этого знать не надо, и можно объявить просто:
но как только ты обращаешься к внутренностям этого объекта, то ессесна компилятору уже нужно знать всё |
| Автор: EnergoHokum 8.10.2008, 08:52 | ||
А шаблоны??? Вот насчёт чистого C -- про типизацию согласен, а плюсы мутируют в последнее время во что-то непонятное, и оч-чень толстое. |
| Автор: vinter 8.10.2008, 08:57 |
шаблоны интсанциируются в compile-time |
| Автор: J0ker 8.10.2008, 21:27 | ||
шаблоны разворачиваются препроцессором - тем же самым что включает инклюды и разворачивают макросы на этапе компиляции все типы определены
у вас предубеждение |
| Автор: Lazin 8.10.2008, 21:51 | ||
препроцессор тут совершенно непричем |
| Автор: J0ker 8.10.2008, 23:41 | ||||
может быть просто одно время работал с компилятором, который разворачивал темплейты в репозиторий и только после этого компилировал... |