Сообщение Re: Стадии сборки проекта - почему это важно (на примере) от 10.07.2023 6:30
Изменено 10.07.2023 6:53 rg45
Re: Стадии сборки проекта - почему это важно (на примере)
Здравствуйте, Shmj, Вы писали:
S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.
Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:
Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю
S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.
Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:
void foo()
{
BaseClass b;
}Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю
| Ответ | |
| Компилятор генерирует дефолтный конструктор, только если это действительно необходимо. Да, он видит неполноту типа, но в то же время он видит, что экземпляры класса здесь не создаются, а значит и поводов для ошибки нет. Возможно, экземпляры этого класса создаются где-то в другой единице трансляции и возможно, в том месте определение класса уже видно. И совсем другое дело, когда дефолный конструктор определен явно. В этом случае компилятор обязан его откомпилировать и во время компиляции конструктора и вылазит неполнота типа и ошибка компиляции. | |
Re: Стадии сборки проекта - почему это важно (на примере)
Здравствуйте, Shmj, Вы писали:
S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.
Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:
Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю
S>Честно сказать, даже доведя до мин. примера (общими силами), я не до конца понимаю почему возникает ошибка компиляции при явном консрукторе.
Вот тебе подсказка: добавь непосредственно перед main определение еще одной функции:
void foo()
{
BaseClass b;
}Эту функцию не обязательно даже где-то вызывать. Просто добавь определение, посмотри, что получилось и подумай еще. Я в тебя верю
| Ответ | |
| Компилятор генерирует дефолтный конструктор, только если это действительно необходимо. Да, он видит неполноту типа, но в то же время он видит, что экземпляры класса здесь не создаются, а значит и поводов для ошибки нет. Возможно, экземпляры этого класса создаются где-то в другой единице трансляции и возможно, в том месте определение класса уже видно. И совсем другое дело, когда дефолный конструктор определен пользователем явно. В этом случае компилятор обязан его откомпилировать и во время компиляции конструктора и вылазит неполнота типа и ошибка компиляции. | |