Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.200.196.38] |
|
Сообщ.
#1
,
|
|||
|
У меня не сложный, вроде, вопрос по встраивым функциям Есть ,например, такой вот код
На который компилятор(VisualC 6.0)говорит вот это main.obj : error LNK2001: unresolved external symbol "public: void __thiscall A::f(void)" (?f@A@@QAEXXZ) Debug/ClassTraining.exe : fatal error LNK1120: 1 unresolved externals Но если поставить перед inline void A::f() extern то код но откомпилирует, но вот так ругнётся: warning C4630: 'f' : 'extern' storage-class specifier illegal on member definition Как один из способов решения этой проблеммы- помещять определение функции в объявление класса. Можно как-то по-другому? |
Сообщ.
#2
,
|
|||
|
|
Сообщ.
#3
,
|
|
|
to .alex Точно так же ругаеться.
А нотация inline void A::f() взята от великого Страуструпа. |
Сообщ.
#4
,
|
|||||
|
Мой VC6.0 не ругается ни на этот код:
ни на этот
|
Сообщ.
#5
,
|
|
|
Мой тоже.
Но как только ты раскидаешь это по файлас то ругаться точно начнет. Если совсем точнее ты определяешь функцию отдельно от итерфейса каласса(другой еденице трансяции наверно), то тут то и возникают проблеммы. |
Сообщ.
#6
,
|
|
|
inline-функции-члены должны быть 1) определены в объявлении класса 2) присутствовать вместе с определением в каждом модуле, который их использует.
Т.е., кроме как определить ее в самом классе, в .h-файле вариантов нет. |
Сообщ.
#7
,
|
|
|
Тогда доп вопрос. Почему при определении с extern код компилируеться?
|
Сообщ.
#8
,
|
|
|
Потому, что extern -- функция, к которой могут обратиться любые другие модули. И она оформлена уже не как inline-последовательность ассемблерных инструкций, а как настоящая функция, получающая управление по call и возвращающая по ret, и существующая во всем собранном прожекте в единственном екземпляре.
|
Сообщ.
#9
,
|
|
|
Ну что-то в этом роде я и думал(в смысле про компановку функции). Но не знал последствий (в смысле хрен встроеться). Спасибо за конкретний ответ.
|