При использовании __forceinline или inline внутри класса нужно ли включать определение в файл заголовка в MSVC? Я слышал смешанные мнения по этому вопросу, которые варьируются в зависимости от разных компиляторов.
Пример 1:
//some_class.hpp
class some_class
{
public:
__forceinline void some_function();
inline void other_function();
};
//some_class.cpp
void some_class::some_function() { }
void some_class::other_function() { }
Пример 2:
//some_class.hpp
class some_class
{
public:
__forceinline void some_function() { }
inline void other_function() { }
};
В MSVC выход из определения функции в файле .cpp вызывает unresolved external symbol
ошибка при связывании, если функция была ранее явно объявлена как inline
, __inline
или же __forceinline
, Поэтому я думаю, что нужно поместить определение функции в заголовок. Это имеет смысл, потому что для того, чтобы на самом деле встроить функцию, ее тело должно быть доступно для компилятора.
Других решений пока нет …