Функция-член класса, определенная (в отличие от объявленного ), в определении класса неявно inline
.Другого кода в заголовках нет.
Вы можете легко проверить это: создайте небольшой проект C ++ с заголовком и двумя файлами реализации, определите функцию
void print(std::ostream& os)
{
os << "Hello, world!\n";
}
в заголовке и включите этот заголовок в оба файла реализации.Компоновщик теперь будет жаловаться, что функция определена дважды.Поставьте inline
перед определением функции, и ошибка исчезнет.
Однако есть еще несколько нарушений.Например, определение константы автоматически получит внешнюю связь.Следовательно,
const int answer = 42;
в заголовке не заставит компоновщика жаловаться на множественные определения answer
, тогда как
int question;
.