2012-11-27 61 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