2014-12-23 3 views
3

수업에 문제가 있습니다.다른 클래스를 사용하는 클래스

두 개의 별도 헤더가 있습니다. Color.h 및 Painter.h :

1). Color.h

class Color{ 
     int number; 
    public: 
     void initialize(); 
     void change (Painter draw); 
} 

2). Painter.h

class Painter{ 
     Color a,b; 
    public: 
     void get(); 
     void draw(); 
} 

내 문제는 필자가 Color 클래스에서 Painter를 사용해야하고 Painter 클래스에서 Color를 사용해야한다는 것입니다. Qt에서 Painter가 유형이 아니라는 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 그 문제에 대한 해결책은 무엇입니까?

+3

painter.h을 포함 거기 color.cpp에서 그것을 정의합니다 void change (Painter draw); 방법을 클래스에 전달하고 전달 된 선언 클래스에 대한 포인터 만 사용하십시오. 하지만 단순한 경우에 순환 종속성이있는 경우 소프트웨어 디자인을 변경하는 것이 좋습니다 –

답변

3

Painter.h에는 Color 유형의 개체가 있으므로 Color.h을 포함해야합니다. 그러나 color.h에 당신은 Painter 클래스에 대한 기대 선언을 추가 할 수 있습니다

class Painter; 
class Color{ 
    int number; 
public: 
    void initialize(); 
    void change (Painter draw); //a forward declaration is enough for this 
} 

그리고 당신은 당신이 앞으로 하나를 선언함으로써 그렇게 할 수는

+0

void change (Painter draw);를 void change (Painter & draw);로 변경하지 않아도됩니다. 작업? – drescherjm

+1

@drescherjm 나는 그것에 대해서도 생각하고 있었지만 괜찮아 보였다. (http://stackoverflow.com/questions/553682/when-can-i-use-a-forward-declaration) –

+0

빠른 답변을 주신데 감사합니다 :) – CROmpir

관련 문제