Делегирующие конструкторы: инициализатор для конструктора делегирования должен отображаться один
У меня есть пара конструкторов, которые отлично работают в стиле С++ 03. Один из конструкторов вызывает конструктор суперкласса (или базового класса)...
class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}
Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
{
refresh();
}
...
Я пытаюсь понять, как использовать новую функцию С++ 11 делегирования ctor, чтобы немного ее немного обмануть. Однако следующий код дает следующую ошибку компилятора...
class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}
Window(Rectangle _rect) : Rectangle(_rect), Window(){}
"инициализатор для делегирующего конструктора должен появиться один"...
Есть ли способ обойти это?
Ответы
Ответ 1
Проблема заключается в том, что Rectangle
получает инициализацию дважды.
Вы можете попробовать изменить, какой делегат:
Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
{
refresh();
}
Window() : Window(Rectangle()) {}
Лучшим решением, вероятно, является отказ от делегирования конструкторов в этом примере.