2012-05-25 8 views
0

문제가 있습니다. 문자열과 객체가있는 클래스 논리가 있습니다. 논리 클래스에 cout<<a이라고 쓰면이 연산자가 내 문자열을 변경합니다. 그래서 나는이 한 :연산자 << 가상 클래스 사용

logic.h

class logic 
{ 
private: 
int str; 
A a; 
public: 
... 
}; 

logic.cpp

... 
... 
cout<<*a; 
... 

ostream& operator<<(ostream& os, const A& A) 
{ 
    int=a.num; 
    return os; 
} 

z.h

class Z 
{ 
public: 
virtual Z* aa(); 
... 
}; 

a.h을

class A: public Z 
{ 
private: 
int num; 
public: 
virtual Z* aa(); 
... 
}; 

과 내가 이러한 오류 있어요 : '{'토큰 (on class A:public Z {) ISO 전에

예상 클래스 이름을 C++ 'Z'어떤 유형의 선언, 'Z'는 '가상'필드로 선언를 금지, 예상 '; '*'토큰을 받기 전에 (모든 가상의 A에서 작동)

나를 도와 줄 수 있습니까?

+0

음, 존재하지 않는 클래스를 상속받을 수 없습니다. 무엇을 성취하려고합니까? – Overv

답변

3

당신은 클래스 정의 이후에 세미콜론이 필요합니다

class A: public Z 
{ 
private: 
    int num; 
    public: 
    virtual Z* aa(); 
    // ... 
}; // <-- SEMICOLON!!1 

는 또한, #includea.hz.h을 보내고으로, Z가 정의 A 전에 정의되어 있는지 확인합니다.

+0

그 사람은 찌질 거 야 :) –

+0

여전히 동일합니다. –

+0

@AsAs 물론'Z'의 정의 뒤에 세미콜론이 필요합니다. –