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