Source files
SF.2
Заголовочный файл не должен содержать определения объектов или определения невстраиваемых функций
Причина
Включение сущностей, подпадающих под правило одного определения, приводит к ошибкам компоновки.
Пример
// file.h:
namespace Foo {
int x = 7;
int xx() { return x+x; }
}
// file1.cpp:
#include <file.h>
// ... more ...
// file2.cpp:
#include <file.h>
// ... more ...
Компоновка file1.cpp и file2.cpp даст две ошибки компоновщика.
Альтернативная формулировка: заголовочный файл должен содержать только:
- директивы
#includeдругих заголовочных файлов (возможно, с защитой от повторного включения) - шаблоны
- определения классов
- объявления функций
- объявления
extern - определения
inline-функций - определения
constexpr - определения
const - определения псевдонимов
using - ???
Контроль
Проверяйте по приведённому выше положительному списку.