Сообщение Re[5]: Ошибка, если конструктор определен в h-файле (этюд?) от 05.07.2023 14:16
Изменено 05.07.2023 14:18 vsb
Re[5]: Ошибка, если конструктор определен в h-файле (этюд?)
Хотя у меня не получилось повторить ситуацию, в которой, как я думал, компилятор будет ругаться. Поэтому прошу знатоков прокомментировать.
Я ожидал, что на строчке Class1(), где вызывается конструктор MyPtr, в свою очередь вызывающий конструктор Class2() программа не скомпилируется, т.к. на момент компиляции этой строки компилятор ещё не увидел полное объявление Class2 и не знает, есть ли у него публичный конструктор.
Однако же: компилируется. При этом если добавить классу Class2 приватный конструктор, то не компилируется, причём со ссылкой вперёд.
Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.
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 приватный конструктор, то не компилируется, причём со ссылкой вперёд.
Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.
Re[5]: Ошибка, если конструктор определен в h-файле (этюд?)
Хотя у меня не получилось повторить ситуацию, в которой, как я думал, компилятор будет ругаться. Поэтому прошу знатоков прокомментировать.
Я ожидал, что на строчке Class1(), где вызывается конструктор MyPtr, в свою очередь вызывающий конструктор Class2() программа не скомпилируется, т.к. на момент компиляции этой строки компилятор ещё не увидел полное объявление Class2 и не знает, есть ли у него публичный конструктор.
Однако же: компилируется. При этом если добавить классу Class2 приватный конструктор, то не компилируется, причём ошибка ссылается вперёд, туда, куда вроде как компилятор ещё не успел дойти.
Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.
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 приватный конструктор, то не компилируется, причём ошибка ссылается вперёд, туда, куда вроде как компилятор ещё не успел дойти.
Извиняюсь за дезинформацию, моё понимание С++ в данном случае подвело и я не знаю, почему так происходит.