У меня есть пара конструкторов, которые прекрасно работают в стиле 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(){}
«инициализатор для делегирующего конструктора должен появляться один» …
Есть ли способ обойти это ??
Проблема в том, что Rectangle
инициализируется дважды.
Вы можете попробовать изменить, какой из делегатов на что:
Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
{
refresh();
}
Window() : Window(Rectangle()) {}
Лучшее решение, вероятно, состоит в том, чтобы избежать делегирования конструкторов в этом примере.
Других решений пока нет …