Ошибка, если конструктор определен в h-файле (этюд?)
От: Shmj Ниоткуда  
Дата: 05.07.23 05:45
Оценка:
Этюд это или нет, но такое неясное поведение, просто интересно почему.

Есть 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-файл пустой конструктор — возникала ошибка компиляции.
=сначала спроси у GPT=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.