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

У меня есть пара конструкторов, которые прекрасно работают в стиле C ++ 03. Один из конструкторов вызывает конструктор суперкласса (или базового класса) …

class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}

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

Я пытаюсь понять, как использовать новую делегирующую Ctor-функцию C ++ 11, чтобы немного справиться с этой задачей. Однако следующий код выдает следующую ошибку компилятора …

class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}

Window(Rectangle _rect) : Rectangle(_rect), Window(){}

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

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

11

Решение

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

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

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

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

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

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]