![]() |
|
Модераторы: bsa |
![]()
|
|
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Откуда компилятору знать что придет после него линкер ? да еще нужно предугадать что сможет линкер доделать ?! Не лучше же вместо проявления телепатических способностей, просто признаться, что работа не может быть до конца выполнена из за каких то ограничений. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Сообщение выдается на стадии генерации объектного кода. А линкер тело функции вставляет, не понятно как, но вставляет. Иначе был бы "unresolved external" Добавлено через 59 секунд
Добавлено через 2 минуты и 6 секунд Возможно ТС соизволит показать нам тело функции. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
могу показать за него тело функции, точнее ее отсутствие в единице трансляции, приводящее к обсуждаемому результату.
Это сообщение отредактировал(а) mes - 23.8.2009, 20:04 |
|||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
Не покажу я Вам тело. Но суть попытаюсь обьяснить. Есть класс MONTH для которого переопределены операторы сравнения (<, >, !=, ==), соответсвующие функции обьявлены online. Обьект класса MONTH является членом другого класса, например, DATE. Значение MONTH можно извлечь из DATE функцией GetMonth() (не инлайн). Делаем примерно так:
Получаем warning. Пробовал обьявить GetMonth() inline - варнинг остался. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Добавлено через 1 минуту и 8 секунд P.S. хотя я вроде догадался, что оно значит Добавлено через 2 минуты и 35 секунд Значит не все перенесли, и у какой то инлайн функции тело остается определенным в другой единице трансляции. |
|||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
Пока просто удалил префикс inline, чтоб варнинги глаза не мозолили.
Потом, как-нибудь поэкспериментирую с разными вариантами объявления-определения. Тему не закрываю, может кто идею подкинет или обьяснит. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вообще то объяснение уже звучало выше, но раз его не заметили приведу еще раз и подробней.
Вы где то нарушили правило выделенное жирным, т.е. в единице трансляции присутствовало только декларация, и не было определения. пример такой ситуации приведен в этом посте : http://forum.vingrad.ru/index.php?showtopi...t&p=1948732 Также нарушили пункт 2), объявив в одном месте функцию инлайн, а в другом определив ее как обычную функцию (как показано в предыдущем примере), что позволило слинковать программу без ошибок. Но это уже напрямую к теме не относится. Это сообщение отредактировал(а) mes - 25.8.2009, 13:47 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Хм.. про это вроде не было речи. Если хидере оно объявлено как инлайн, то все модули поймут его как инлайн. Разве нет? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| mekhanikus |
|
||||||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
Туплю по-черному
Если делаем так:
Что компилятору не нравится во втором случае? |
||||||
|
|||||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если предыдущий пример
изменить на
то линковка происходить не должна. Это сообщение отредактировал(а) mes - 25.8.2009, 14:50 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
позвольте узнать, какой у Вас компилятор ? |
|||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
GNU GCC Compiler.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
gcc 3.4.2, как и VS2008 не слинковывает то, что Вы описали в предыдущем посту. вот упрощенный пример:
а Ваш компилятор как реагирует на этот код ? Это сообщение отредактировал(а) mes - 26.8.2009, 15:41 |
|||
|
||||
![]()
|
| Правила форума "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. |