2013-10-07 3 views
1

최근에 다른 C++ 문제가 발생하여 다소 힘든 시간을 보냈습니다. 우리는 작은 프로그램이 있다고 가정 :이 경우가상 클래스에 대한 포인터

class A { 
    public: 
    virtual bool c() = 0; 
    virtual bool b() = { return false; }; 
    virtual ~A() {} 
} 

class B : public A { 
    public: 
    bool b() = { return true; }; 
    ~B() {} 
} 

... 

void c(A *pointer) { 
    if (pointer->b()) { 
    cout << "Derived class"; 
    } 
} 

이 컴파일러 오류 "불완전한 A 형에 멤버 액세스"와 방법 C()의 "만약"줄에 오류를 반환합니다. 누군가가 왜 컴파일러가 그러한 오류를 반환하는지 설명 할 수 있습니까? 그리고 실제로 예외를 해고하는 것이 옳다면 어떻게 방지 할 수 있습니까?

대단히 감사합니다.

+2

게시 한 코드를 실제로 컴파일하려고합니까? 코드에 몇 가지 구문 오류가 있습니다. 그리고 그건 그렇고 : 당신의 코드를 복사하고 간단한 오류를 해결했습니다. 모든 것이 잘 컴파일됩니다. –

답변

3

"불완전 유형 A"은 컴파일 한 코드 (게시 한 코드가 아님)에서 A의 정의가 c에서 사용되기 전에 정의되어 있지 않다는 것을 의미합니다. 이 정의는 c과 같은 소스 파일이나 해당 소스 파일에 포함 된 헤더에 정의해야합니다.

+0

실제로! 나는 방금 "A"의 정의를 포함하는 것을 잊었다는 것을 깨달았다. 어쨌든 고마워! – jrbn

관련 문제