У меня есть класс, в котором есть встроенный член, но позже я решил, что хочу удалить реализацию из заголовков, поэтому я переместил тело членов функций в файл cpp. Сначала я просто оставил встроенную подпись в файле заголовка (sloppy me), и программа не смогла правильно связать. Затем я исправил заголовок, и все это отлично работает, конечно.
Но не был ли он полностью необязательным?
В коде:
Во-первых:
//Class.h
class MyClass
{
void inline foo()
{}
};
Далее изменено на (не будет ссылка):
//Class.h
class MyClass
{
void inline foo();
};
//Class.cpp
void MyClass::foo()
{}
А потом (будет отлично работать):
//Class.h
class MyClass
{
void foo();
};
//Class.cpp
void MyClass::foo()
{}
Я думал, что inline не является обязательным, и предположил, что я могу пройти с предупреждением о моей неряшливости, но не ожидал ошибки связывания. Какая правильная/стандартная вещь, которую должен сделать компилятор в этом случае, заслужил ли я свою ошибку в соответствии со стандартом?