2012-11-27 62 views
11

我有一对构造函数在C++ 03风格中工作得很好。其中一个构造函数调用父类(或基类)的构造......委托构造函数:委托构造函数的构造函数必须单独出现

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

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

我试图弄清楚如何使用新的C++ 11委派构造函数功能neaten这了一点。但是,下面的代码提供了以下编译器错误...

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

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

“的委托构造函数必须单独出现的初始化” ......

有没有解决这个什么办法?

回答

9

问题是Rectangle正在初始化两次。

你可以尝试改变其中一个代表什么:

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

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

最好的解决办法可能是为了避免在这个例子中委托构造函数。

+0

“避免委托构造函数在这个例子中” - 看你的代码工作(谢谢+1),你可以扩展你为什么提出这个建议吗? – learnvst

+0

@learnvst他们是一个奇特的默认参数。我发现默认参数或您的原始代码更具可读性。 – Pubby

+0

是的,Window(Rectangle())'看起来有点奇怪。我明白你来自哪里。 – learnvst