Подтвердить что ты не робот

Делегирующие конструкторы: инициализатор для конструктора делегирования должен отображаться один

У меня есть пара конструкторов, которые отлично работают в стиле С++ 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(){}

"инициализатор для делегирующего конструктора должен появиться один"...

Есть ли способ обойти это?

4b9b3361

Ответ 1

Проблема заключается в том, что Rectangle получает инициализацию дважды.

Вы можете попробовать изменить, какой делегат:

Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
{
    refresh();  
}

Window() : Window(Rectangle()) {}

Лучшим решением, вероятно, является отказ от делегирования конструкторов в этом примере.