2012-11-27 18 views
11

Ben C++ 03 tarzında gayet iyi çalışan bir çift kurucu var. Kurucular biriDelegating constructors: bir temsilci için bir başlatıcı tek başına görünmelidir

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

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

biraz bu kadar neaten yeni C++ 11 delegating ctor işlevselliğini nasıl kullanılacağını anlamaya çalışıyorum ... Bir üst sınıf (veya temel sınıf) yapıcısını çağırır. Ancak, aşağıdaki kod aşağıdaki derleyici hata ...

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

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

verir "yalnız görünmesi gereken bir delegating yapıcısı için bir başlatıcı" ...

bu çevrede bir yolu var mı ??

cevap

9

Sorun şu ki, Rectangle iki kez başlatılıyor.

Sen hangisini delegeler neye değiştirmeyi deneyebilirsiniz:

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

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

iyi çözüm bu örnekte kurucular delege önlemek için muhtemelen.

+0

"Bu örnekte kurucuları devretmekten kaçının" - Kodunuz çalışır gibi görünüyor (teşekkürler +1), bu öneriyi neden yaptığınız konusunda genişletebilir misiniz? – learnvst

+0

@learnvst Bir fantezi varsayılan argümanı olarak davranıyorlar. Daha okunaklı olması için varsayılan argümanları veya orijinal kodunuzu buluyorum. – Pubby

+0

Evet, “Pencere (Dikdörtgen())” şey biraz garip görünüyor. Nereden geldiğini görüyorum. – learnvst