Re[5]: Ошибка, если конструктор определен в h-файле (этюд?)
От: vsb Казахстан  
Дата: 05.07.23 14:16
Оценка: 4 (1)
Хотя у меня не получилось повторить ситуацию, в которой, как я думал, компилятор будет ругаться. Поэтому прошу знатоков прокомментировать.

template <typename T>
class MyPtr {
  T *ptr;

  public: 
  MyPtr() {
    ptr = new T();
  }
};

class Class2;

class Class1 {
  MyPtr<Class2> c2ptr;

  Class1() {}
};

class Class2 { };


Я ожидал, что на строчке Class1(), где вызывается конструктор MyPtr, в свою очередь вызывающий конструктор Class2() программа не скомпилируется, т.к. на момент компиляции этой строки компилятор ещё не увидел полное объявление Class2 и не знает, есть ли у него публичный конструктор.

Однако же: компилируется. При этом если добавить классу Class2 приватный конструктор, то не компилируется, причём ошибка ссылается вперёд, туда, куда вроде как компилятор ещё не успел дойти.

Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.
Отредактировано 05.07.2023 14:18 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.