В библиотеке я следующая в заголовке:Вызов без встроенных функций от встроенных функций
// button.hpp
class ExtraButtons
{
public:
static inline void show() { setShown(true); }
static inline void hide() { setShown(false); }
static void setShown(bool shown);
};
и следующая в исходном файле:
#include "button.hpp"
void ExtraButtons::setShown(bool shown)
{
}
Библиотека компилируется нормально. Однако, когда я использую библиотеку и я включаю button.hpp
, я получаю эту ошибку от setShown
звонков в show()
и hide()
:
undefined reference to `ExtraButtons::setShown(bool)'
я могу решить эту проблему путем удаления инлайны из show()
и hide()
и их определения в исходном файле, как и в обычном порядке, ИЛИ, делая также setShown
. Почему это так? Это единственные решения?
Если вы хотите, чтобы это было связано, вам необходимо предоставить * оба * объектных файла в компоновщик. Как вы ссылаетесь на компоновщик? –
Мне трудно поверить, что 'inline' будет иметь такой большой эффект. По моему опыту, 'inline' - это скорее напоминание о себе, что вы ожидаете, что функция будет скомпилирована inline, а не что-то еще. –
@MrLister: Цель 'inline' - разрешить определения в нескольких единицах перевода (что часто необходимо, чтобы компилятор мог встроить его). Но вы правы, что это не должно иметь никакого значения здесь. –