2011-11-16 5 views
1

나는 이미 오류에 관한 게시물을 보았지만 이것은 약간 다릅니다. 그러니 이걸 닫지 마십시오. 인터페이스 클래스가 있고 인터페이스 클래스를 상속하고 인터페이스 클래스의 메서드를 오버라이드하는 클래스가 있습니다. 이 코드는 좋아해 보인다.기본 클래스가 정의되지 않았습니까?

//interface file 
//Interface.h 
class A 
{ 
    virtual method1(); 
}; 


//b.h 
#include "Interface.h" 
class B : public A 
{ 
    //declaration 
} 

//b.cxx 
#include b.h 
B::method1() 
{ 
    //definition 
} 

나는이 모든 클래스를 dll로 내보내겠다. 그리고 exe에서 dll에 메서드와 클래스를 사용하고 있습니다. 이 exe는 또 다시 somes 클래스를 포함합니다. 이러한 클래스는 동일한 인터페이스 파일을 상속하며 method1()도 사용합니다. 그래서 method1() 내 파일에 b.h를 포함하고 있습니다. 내 include 문 순서가 Interface.h 및 b.h 인 경우 exe에 대한 컴파일러 오류가 발생합니다. "기본 클래스가 정의되지 않았습니다"라고 말함. 하지만 Include 문을 재정렬하면 컴파일 오류가 발생하지 않습니다. 어느 누구도이 문제의 근본적인 원인이 될 수있는 것을 제안 할 수 있습니까?

+0

당신이 전체 오류를 첨부 할 수 있습니다 : 두 번째는, 적어도 위의 코드에서, B의 클래스 정의에 method1를 선언하지 않는 것이 무엇입니까? 단순히 오류를 잃어 버렸을 수 있습니다. –

+0

실제 오류 메시지가 표시되는 코드 조각과 전체 오류 메시지를 게시하십시오. 그렇지 않으면 우리 모두가 짐작할 수 있습니다. – arne

답변

1

예제 코드에는 실제로 두 가지 오류가 있습니다. 먼저 반환 유형없이 메서드를 선언하면 오류가 발생합니다.

class B : public A 
{ 
    virtual void method1(); 
}; 
0

A와 B의 클래스 정의 모두에서 가상 메소드 "method1()"을 반드시 선언해야합니다. 당신이 인터페이스 경우

+0

이미 클래스 B에서 선언했습니다. 내 주요 문제는 exe에서 컴파일 오류입니다. 그리고 나는 또한 exe에서 method1()을 정의하고있다. 그러나 내가 exe를 컴파일 할 때 B.h를 위해 정의되지 않은 기본 클래스라는 오류가 발생합니다. 그것은 사실이 아니어야합니다. –

0

는 IA 입니다 및 IA.h에 선언, IA에서 상속 모든 클래스 EXE 파일에서 그것을 할 수 있는지 확인 또는 DLL은 전에 IA.h을 포함 클래스 정의에 Foo.h

나는이 헤더에 따라 그렇지 않은 것을 일어나는 의심 당신이 특정 파일 의 정의 IA을 받고되지 않을 수도 순서를 포함 무엇 다른

관련 문제