![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
К функции xxx мы обращаться можем из main.cpp. Хотя она и определена в другом файле.
Как создать объект класса First в файле main.cpp? (не использую #include и файлы заголовков)
|
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
Указатель можно создать так
а вот создать обьект - никак без включения заголовочного файла. Откуда ему знать, есть у класса такой конструктор, открыт ли он вообще итд... А это все компилятору нужно знать на этапе компиляции. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
интересно, как для т.с. связано "создание объекта" и "линковка" ? Это сообщение отредактировал(а) mes - 17.7.2009, 14:55 |
|||
|
||||
AlexT84 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 10.7.2009 Репутация: нет Всего: 1 |
Не используя инклуда -- только заново описать класс First.
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я сейчас разбираюсь в том, как происходит сборка программмы из исходников. линковка - один из её этапов. но до линковки не доходит, т.к. исходник даже не компилирууется. ![]() класс определён в одном translation unit использовать его я хочу в другом translation unit значит необходимо обеспечить взаимодействие между юнитами. здесь сказано следующее:
вы хотите сказать, что нельзя написать программу без использования заголовочных файлов? |
|||
|
||||
azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
почему это нельзя? Можно!
вот она ![]()
Как он будет компилироваться?
поставьте себя на место компилятора. Можно ли компилировать этот код, не зная есть ли класса A конструктор по умолчанию (например). |
||||||||
|
|||||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
можно пример, чтобы было понятнее о чем идет речь? Добавлено @ 15:57 подозреваю что речь идет об этом
ну так с классами это тоже прокатывает. Тут указана сигнатура функции, компилятор знает все необходимое об этой функции и может оставить остальное линкеру. Если описать структуру класса - для классов будет тоже самое (в принципе это и происходит при включении заголовочного файла). (непонятно зачем приписал extern, он тут не нужен, убрал). Это сообщение отредактировал(а) azesmcar - 17.7.2009, 16:00 |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
функция определена в другом файле. тем не менее линкер/компилятор её находит.
|
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
Ну, прототип функции обявлен ведь.
с классами тоже можно. Вот так. А включение заголовочного файла только копирует его содержимое в текущий. |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
у меня не получается. этап линковки не проходит.
Это сообщение отредактировал(а) zim22 - 17.7.2009, 16:06 |
||||
|
|||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
file1.cpp
file2.cpp
а вот эту часть
заменяют на #include а саму декларацию выделяют в заголовочный файл. |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Почему в случае определения функции внутри класса линкер не находит её?
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |