2012-11-27 2 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(); 
    } 
... 

내가 조금이를 neaten하는 새로운 C++ (11) 위임의 ctor 기능을 사용하는 방법을 알아 내려고 노력하고 있어요 ... 슈퍼 클래스 (또는 기본 클래스) 생성자를 호출합니다. 그러나 다음 코드는 다음과 같은 컴파일러 오류 ...

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