В каком случае нужно определять функцию в заголовочном файле?

1,00
р.
Стоит ли определять функции сразу в заголовочном файле .h, или всегда определять в файле .cpp?

Ответ
Если функция будет использоваться только внутри одного CPP, то выносить в заголовочный файл большого смысла нет. Если функции вызывают друг друга, то можно разделить объявление и реализацию. Типа инкапсуляция, "приватная функция".
Если функция будет использоваться в нескольких файлах, то следует объявить её в H и реализовать в CPP. Таким образом функция будет существовать в единственном экземпляре и её можно будет использовать где угодно, просто включив заголовочный файл. Типа публичный интерфейс, "публичная функция".
Если функция шаблонная (template) или инлайновая (inline), то без вариантов следует размещать и объявление, и реализацию в заголовочном файле, потому что шаблонные функции по сути текстовые шаблоны, и их компилятор не сможет "извлечь" из CPP.

Если объявление и определение инлайновой функции не разместить в заголовочном файле, то на стадии сборки посыпятся ошибки, что "определение функции не найдено".
Если неинлайновую функцию разместить в заголовочном файле, то на стадии сборки могут посыпаться ошибки про "несколько определений функции", если заголовочный файл включён в нескольких модулях.

В целом, вопрос сводится к "делать ли функцию инлайновой". А вот делать ли её инлайновой — это уже вопрос производительности выполнения против возможности перелинковки против скорости сборки.
См. также When should I write the keyword 'inline' for a function/method?