2017-03-25 16 views
0

C++에서 합성 패턴 및 상속과 함께 약간 연주했습니다. 그것은 뭔가 특별한 것이어서는 안된다. 나는 컴포넌트가 부모를 컴포지트로 가지고 있다는 것을 코딩했다. 컴포지트는 컴포넌트로부터 파생되고 그것의 기본 클래스 (Component)에서 생성자를 사용해야한다. 그러나 나는 다음과 같은 오류 있어요 : 조금으로 조사C++ 기본 생성자 lvalue to parameter

"Cannot convert lvalue of type 'Composite*' to parameter type 'Composite*'"

과 우변 등/lvalues입니다하지만 "매개 변수"유형에 대해 아무것도 찾지 못했습니다 것을 알게되었습니다. 매개 변수 유형이 rvalue입니까? lvalue를 매개 변수 유형으로 변환 할 수 있습니까? 수정 코드

class Component { 
private: 
    Composite* parent; 
public: 
    Component(Composite* parent) { 
    this->parent = parent; 
    } 
}; 
class Composite : public Component { 
public: 
    Composite(Composite* parent) : Component(parent) /* <-- Error */ { } 
}; 
+0

전달 선언을 수정하고 누락 된 세미콜론을 추가하면 표시된 코드가 그대로 잘 작성됩니다. 표시된 코드에 아무런 문제가 없습니다. 분명한 것은 실제 코드의 [mcve]에 문제를 제공하는 대신 환상적인 코드입니다. 실패. –

+0

세미콜론을 수정하고 해당 코드를 시도했지만 오류가 계속 발생했습니다 – TreCore

+0

원래 이해하지 못했던 "앞으로 선언을 수정하는"부분은 무엇입니까? –

답변

0

댓글 :

여기 작은 버전으로 내 코드입니다.

class Composite; // <- _declare_ the idea of a Composite class here 

class Component { 
private: 
    Composite* parent; 
public: 
    Component(Composite* parent) { 
     this->parent = parent; 
    } 
}; 

class Composite    // <- _define_ it here 
     : public Component { 
public: 
    Composite(Composite* parent) : Component(parent) /* <-- no error */ { } 
}; 
+0

thx! 그래서 기본 클래스에서 derrived 클래스를 사용하면 기본 클래스보다 먼저 derrived 클래스를 선언해야합니다. 그러나 실제로 "매개 변수 유형"을 의미하는 것은 무엇입니까? – TreCore

+0

컴포지트는 처음 "사용"되기 전에 "선언"되어야합니다. 즉 타입을 언급 할 때, 컴파일러는 그것이 어떻게 보이는지 아직 기술하지 않았다하더라도 이미 존재한다고 말했을 것입니다. –

+0

ok make thx ... 나는 또한 "매개 변수 유형"이 무엇인지를 보았지만 "lvalues"와 관련이 있는지 이해하지 못한다 ... 매개 변수 유형은 특정 매개 변수의 변수 유형이거나 내가 잘못? 그래서 매개 변수가 lvalue 또는 rvalue 수 있습니다 이해합니다 (예를 들어 "const"사용하는 경우) – TreCore