15

C++03 スタイルで問題なく動作するコンストラクターのペアがあります。コンストラクターの 1 つがスーパークラス (または基本クラス) コンストラクターを呼び出します...

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

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

新しい C++11 委任 ctor 機能を使用してこれを少し整理する方法を見つけようとしています。ただし、次のコードでは次のコンパイラ エラーが発生します...

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

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

「委譲コンストラクターの初期化子は、単独で出現する必要があります」...

これを回避する方法はありますか??

4

1 に答える 1

14

問題は、Rectangle2 回初期化されることです。

どちらを何に委任するかを変更してみてください。

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

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

おそらく最善の解決策は、この例でコンストラクターの委譲を避けることです。

于 2012-11-27T18:45:11.620 に答える