Qt Creator: «встроенная функция используется, но никогда не определяется» - почему? - PullRequest
13 голосов
/ 14 сентября 2009

Почему я получаю это предупреждение в Qt Creator: встроенная функция ‘bool Lion :: growl ()’ используется, но никогда не определяется?

Я дважды проверил свой код и получил объявление

inline bool growl () в Lion (lion.h)

и соответствующая реализация в lion.cpp:

inline bool Lion::growl ()

Что происходит?

РЕДАКТИРОВАТЬ: я предполагал, что законно определять фактический встроенный метод в файле .cpp (ключевое слово inline предупреждает компилятор о поиске тела метода в другом месте), или я ошибаюсь?

Я не хочу загромождать заголовочные файлы деталями реализации.

Ответы [ 3 ]

26 голосов
/ 14 сентября 2009

Ну, я не знаю точную проблему, но для начала:

  • Предполагается, что встроенные методы будут реализованы в заголовочном файле. Компилятор должен знать код, чтобы на самом деле inline it.
  • Также использование ключевого слова "inline" в объявлении класса не имеет никакого эффекта. Но это тоже не повредит.

См. Также: c ++ faq lite

3 голосов
/ 29 февраля 2012

Предполагается, что встроенные методы будут реализованы в заголовочном файле. компилятор должен знать код, чтобы фактически встроить его.

За исключением случаев, когда встроенная функция используется в том же проекте, возможно в другом файле, который # включает его заголовок.

Мне не хватает такого ограничения для библиотек, потому что ограничение заголовков на функциональные прототипы делает вещи более читабельными.

Как насчет #, включая -ing .cpp?

1 голос
/ 29 сентября 2009

В дополнение к тому, что сказал Йохан, у вас не может быть отдельного определения и объявления для функции, даже если они находятся в одном заголовочном файле. Это верно особенно для функций-членов классов. Код функции должен иметь вид:

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

И НЕ формы

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
...