Qt Creator: "встроенная функция используется, но не определена" - почему?
Почему я получаю это предупреждение в Qt Creator: `inline function 'bool Lion:: growl() используется, но не определено?
Я дважды проверил свой код и имел объявление
inline bool growl ()
в Lion
(lion.h
)
и соответствующей реализации в lion.cpp
:
inline bool Lion::growl ()
Что происходит?
EDIT: Мое предположение состояло в том, что законно определять фактический встроенный метод в .cpp файле (ключевое слово inline
предупреждает компилятор о поиске тела метода в другом месте), или я ошибаюсь?
Я не хочу загромождать свои файлы заголовков деталями реализации.
Ответы
Ответ 1
Ну, я не знаю точной проблемы, но для начинающих:
- Предполагается, что встроенные методы будут реализованы в файле заголовка. Компилятор должен знать код, чтобы на самом деле его встроить.
- Также использование ключевого слова "inline" в объявлении класса не имеет никакого эффекта. Но это тоже не повредит.
Смотрите также: С++ faq lite
Ответ 2
Предполагается, что встроенные методы будут реализованы в файле заголовка. компилятор должен знать код, чтобы фактически вставить его.
За исключением случаев, когда встроенная функция используется в одном проекте, возможно, в другом файле, который # включает заголовок.
Я скучаю, есть такое ограничение для библиотек, потому что ограничение заголовков на функционирование прототипов делает вещи более читабельными.
Как насчет # включения .cpp?
Ответ 3
В дополнение к тому, что сказал Йоханн, у вас не может быть отдельного определения и объявления для функции, даже если оба они находятся в одном заголовочном файле. Это справедливо, особенно для функций-членов классов. Код функции должен иметь вид:
class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'
И НЕ формы
class someClass
{
public:
void someFunc();
}
void someClass::someFunc()
{ ... }