Этюд это или нет, но такое неясное поведение, просто интересно почему.
Есть h-файл, в нем декларирован класс и
пустой конструктор. Есть еще куча кода, который и вызывает проблему — это как бы и есть неизвестное. Упрощенно так:
test.h
class Class1
{
public:
Class1();
};
В test.cpp — уже определение:
#include "test.h"
Class1::Class1()
{
}
Так все работает.
Если же перенести определение в h-файл, вот так:
class Class1
{
public:
Class1(){}
};
(и убрать из cpp-файла, конечно) — то получаю ошибку: invalid application of 'sizeof' to an incomplete type 'namespace1::Class2'. Где Class2 — это другой класс, который как-то связан с Class1.
Вопрос мой вот в чем. Я думал что абсолютно без разницы в h-файле определение или нет — думал что это эквивалентно и во всех жизненных ситуациях проблемы не вызовет. И представить не мог, что если убрать из cpp-файла этот пустой конструктор и перенести в h-файл, то получим ошибку компиляции. Как же это возможно?
Можете ли вы привести код, который продемонстрирует такую проблему? Т.е. чтобы при переносе в h-файл пустой конструктор — возникала ошибка компиляции.