Здравствуйте, Shmj, Вы писали:
S>Текст ошибки: invalid application of 'sizeof' to an incomplete type 'namespace1::Class2'
S>Но мой вопрос в другом — не нужно именно такую же ошибку. Вообще почему может возникать — не все ли равно компилятору где определен ПУСТОЙ конструктор??? Любое доказательство что компилятору не все равно — меня устроит.
C++ компилируется сверху вниз. На момент компиляции определённой строки он знает только то, что было написано выше. Поэтому — нет, не всё равно. В первом случае у тебя сначала идёт декларация — что есть такой-то конструктор, потом идёт ещё какой-то код (вероятно связанный с Class2), потом уже идёт реализация конструктора. И на момент компиляции этой реализации конструктора компилятор знает размер Class2. Во втором случае — это не так.
Помимо прочего: заголовочные файлы включаются в проект несколько раз (обычно). И если у тебя реализация метода в заголовочном файле, то компилятор будет её компилировать несколько раз. Само по себе это не ошибка, линкер всё разрулит, но это просто неправильная организация кода, увеличение времени компиляции. Единственная причина держать реализацию функции или метода в заголовочном файле это использование шаблонов.