Информация об изменениях

Сообщение Re: Стадии сборки проекта - почему это важно (на примере) от 10.07.2023 6:30

Изменено 10.07.2023 6:53 rg45

Re: Стадии сборки проекта - почему это важно (на примере)
Здравствуйте, Shmj, Вы писали:

S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.


Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:

void foo()
{
    BaseClass b;
}


Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю

  Ответ
Компилятор генерирует дефолтный конструктор, только если это действительно необходимо. Да, он видит неполноту типа, но в то же время он видит, что экземпляры класса здесь не создаются, а значит и поводов для ошибки нет. Возможно, экземпляры этого класса создаются где-то в другой единице трансляции и возможно, в том месте определение класса уже видно. И совсем другое дело, когда дефолный конструктор определен явно. В этом случае компилятор обязан его откомпилировать и во время компиляции конструктора и вылазит неполнота типа и ошибка компиляции.
Re: Стадии сборки проекта - почему это важно (на примере)
Здравствуйте, Shmj, Вы писали:

S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.


Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:

void foo()
{
    BaseClass b;
}


Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю

  Ответ
Компилятор генерирует дефолтный конструктор, только если это действительно необходимо. Да, он видит неполноту типа, но в то же время он видит, что экземпляры класса здесь не создаются, а значит и поводов для ошибки нет. Возможно, экземпляры этого класса создаются где-то в другой единице трансляции и возможно, в том месте определение класса уже видно. И совсем другое дело, когда дефолный конструктор определен пользователем явно. В этом случае компилятор обязан его откомпилировать и во время компиляции конструктора и вылазит неполнота типа и ошибка компиляции.