Тупой вопрос про написание inline функций
От: Stas Chistyakov Россия  
Дата: 05.01.03 07:46
Оценка:
Если писать енти функции при определении класса то все понятно, но тут понадобилось написать такие функции за определением (не в нем). Я всегда счетал, что все как с обычными, но надо только inline добавить, но при компиляции написало LNK2019 unresolved external symbol.......

Полез я в документацию, там вроде много чего говорится. Там говорится о "one definition" rule.
Скажите, inline функцию надо определять в том же *.h файле ????????? Я просто думал, что можно и в cpp ???????????????
... << RSDN@Home 1.0 beta 4 >>
Re: Тупой вопрос про написание inline функций
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 05.01.03 07:53
Оценка:
Здравствуйте, Stas Chistyakov, Вы писали:

SC>Скажите, inline функцию надо определять в том же *.h файле ????????? Я просто думал, что можно и в cpp ???????????????


Вообще-то, их обычно пишут в том же .h, где объявлен класс, поскольку для того, чтобы код функции был подставлен в место вызова, компилятор должен знать ее реализацию.
- Искренне ваш, Поросенок Пафнутий
Re: Тупой вопрос про написание inline функций
От: UgN  
Дата: 05.01.03 07:58
Оценка: 3 (1)
Здравствуйте, Stas Chistyakov, Вы писали:

SC>Если писать енти функции при определении класса то все понятно, но тут понадобилось написать такие функции за определением (не в нем). Я всегда счетал, что все как с обычными, но надо только inline добавить, но при компиляции написало LNK2019 unresolved external symbol.......


SC>Полез я в документацию, там вроде много чего говорится. Там говорится о "one definition" rule.

SC>Скажите, inline функцию надо определять в том же *.h файле ????????? Я просто думал, что можно и в cpp ???????????????

Можно и в CPP.

Ты не забыл имя класса?


inline void ClassName::Function();
Re: Тупой вопрос про написание inline функций
От: m.a.g. Мальта http://dottedmag.net/
Дата: 05.01.03 07:58
Оценка: 9 (2)
Здравствуйте, Stas Chistyakov, Вы писали:

SC>Полез я в документацию, там вроде много чего говорится. Там говорится о "one definition" rule.

SC>Скажите, inline функцию надо определять в том же *.h файле ????????? Я просто думал, что можно и в cpp ???????????????

Проблема вот в чем: при раздельной компиляции твоих .cpp файлов вместо каждого вызова inline-функции компилятор должен подставить ее тело, а для этого он должен его иметь — соответственно если inline-функция объявлена в .cpp, то компилятор ее не увидит, а линкер просто не умеет опять вызывать компилятор для разрешения таких ситуаций.

В стандарте все это выражено через два типа связывания символов: internal и external.
... << Машина времени — Пока горит свеча >> ...
Re[2]: Тупой вопрос про написание inline функций
От: Stas Chistyakov Россия  
Дата: 05.01.03 08:10
Оценка:

Все таки нельзя. Вернее можно но только если класс определен в этом же CPP, но это тоже самое, что и все в H.
... << RSDN@Home 1.0 beta 4 >>
Re[2]: Тупой вопрос про написание inline функций
От: Stas Chistyakov Россия  
Дата: 05.01.03 08:10
Оценка:
Ага, спасибо. Я нашел выссказываение про раздельную компиляцию h и cpp, но просто думал, что можно как-нибудь ключами компилятора или еще какой хреньью на это повлиять. Спасибо.
... << RSDN@Home 1.0 beta 4 >>
Re[3]: Тупой вопрос про написание inline функций
От: m.a.g. Мальта http://dottedmag.net/
Дата: 05.01.03 08:28
Оценка:
Здравствуйте, Stas Chistyakov, Вы писали:

SC>Ага, спасибо. Я нашел выссказываение про раздельную компиляцию h и cpp, но просто думал, что можно как-нибудь ключами компилятора или еще какой хреньью на это повлиять. Спасибо.


Нет, не .h и .cpp компилируются раздельно — ситуация совсем другая. В каждый .cpp включаются все файлы, упомянутые в #include — результат является одной единицей трансляции. Каждая единица компилируется раздельно — так что если inline-функция не была определена в одном из включенных файлов, то она будет недоступна компилятору во время компиляции этой единицы трансляции.
... << STING [] Englishman In New York >> ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.