![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
MsLive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Здравствуйте!
Недавно возник такой вопрос: Как мне включить класс в проект, который использует неопределенный тип данных(и таких данных много) например:
в другом файле
Любая попытка включить этот класс без #include не была успешной(компилятор писал ошибку связанную с неизвестным типом) ![]() З.Ы. Если предполагать что компьютер не знает как с ними работать, тогда почему бы не писать ошибку когда я именно использую неизвестный тип, а не получаю доступ к известному классу с известном типом- и даже не к внутреннему классу этого класса(потомку)? ![]() Заранее спасибо! |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
ты бы книжку почитал сначала, хотя-бы по Си...
|
|||
|
||||
MsLive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Что вы имеете ввиду? |
|||
|
||||
J0ker |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
![]() Это сообщение отредактировал(а) J0ker - 6.10.2008, 19:30 |
||||
|
|||||
MsLive |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
![]() |
||||||
|
|||||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
потому что Гладиолус (стыдно этого незнать). |
|||
|
||||
Lin07 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.7.2008 Репутация: -1 Всего: -1 |
потому что компилятор не знает ,что за обьект ,если вы ему о нем не расскажете... ![]() как он может знать что это такое ,если вы ему о обьекте не слова не говорите ![]() J0ker +1 Это сообщение отредактировал(а) Lin07 - 6.10.2008, 23:55 |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
он (компилятор) проиндексирует жесткий диск компьютера ![]() Добавлено через 42 секунды и найдет нужный заголовочный файл, где-бы он не был |
|||
|
||||
tier2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
![]() |
|||
|
||||
MsLive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Так об этом я и говорил: Если я обращаюсь к неизвестному объекту- то писать ошибку, а если не обращаюсь- не писать. Или это как-то связанно с адресом памяти в классе? И почему даже если в классе есть указатель с неопределенным типом то я тоже должен это обозначивать? |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Потому что компилятор не знает, что ты пытаешься сделать. Может это у тебя не тип, а объект, функция, переменная... Что делать то?!? Он не знает. Вот и ругается. Если тебе нужен указатель или ссылка на объект неизвестного типа, то ты должен сделать предопределение этого типа:
Программа во время исполнения не может ругаться на доступ к неизвестному объекту, так как во время ее работы нет понятия типа объекта. Это особенность компилируемых языков (к коим относятся Си и С++), если тебе нужны подобные свойства, то обрати внимание на интерпретируемые (BASIC, Python и пр.) |
||||
|
|||||
MsLive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Я имею ввиду не во время работы,- а во время компиляции проекта.
Если исполняемая функция\класс\объект\структура вызывается то компилятор проверяет наличие обозначения данной переменной в исполняемом классе\файле если ее там нет(в исполняемом файле нет #include, обозначения класса: class temp_obj)- пишет ошибку. И не важно что это функция,класс- компилятор будет понимать: если он вызывает неопознанную инструкцию, он будет давать об этом отсчет (ошибка) (во время компиляции) З.ы. "Что делать то?!? Он не знает. Вот и ругается" - ругаться положено не по пустякам т.е. когда я этот объект вызываю- он дает об этом отсчет, а если не вызываю он дальше компилирует проект. |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
во время компиляции исполняемого файла еще нет, он появится только после успешной компоновки, include - директива, которая говорит компилятору, что нужно вставить текст одного файла в другой.
зы RTFM, лучше начни с основ, а то путать исходник с исполняемым файлом как-то совсем грустно... |
|||
|
||||
MsLive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Про исполняемый файл я разве говорил? Это сообщение отредактировал(а) MsLive - 7.10.2008, 13:56 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
MsLive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Значит вы меня не так поняли. Под словом исполняемый файл я не имел ввиду .exe |
||||
|
|||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Для платформы windows в общем случае исполняемым файлом является PE-файл, и расшифровывается так-же: Portable Executable. Как правило, такому файлу дают расширение exe. А ты что имел в виду? |
|||
|
||||
MsLive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Я имел ввиду файл(.cpp\.h)/класс который выполняет исполнение неопределенного объекта(в данном случае компилятор должен написать ошибку) з.ы. а как всетаки .ехе расшифровывается?(название) |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
патамушта C++ - язык со статической типизацией - типы существуют ТОЛЬКО на этапе компиляции, поэтому компилятору нужно знать как минимум размер объекта определенного типа если данный объект используется как мембер другого объекта
если используется указатель на объект или ссылка (являющаяся так-же указателем), то компилятору этого знать не надо, и можно объявить просто:
но как только ты обращаешься к внутренностям этого объекта, то ессесна компилятору уже нужно знать всё |
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
А шаблоны??? Вот насчёт чистого C -- про типизацию согласен, а плюсы мутируют в последнее время во что-то непонятное, и оч-чень толстое. |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
шаблоны разворачиваются препроцессором - тем же самым что включает инклюды и разворачивают макросы на этапе компиляции все типы определены
у вас предубеждение ![]() Это сообщение отредактировал(а) J0ker - 8.10.2008, 21:27 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
J0ker |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
может быть просто одно время работал с компилятором, который разворачивал темплейты в репозиторий и только после этого компилировал... |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |