2010-04-26 2 views
0

에서 C++ 클래스의 추상적 ++ 프로그램 (안 C++/CLI)를 만드는 것 알아내는.나는 평범한 구식 C를 구축 할 VS2008를 사용하고 VS2008

Base* obj; 
obj = new Derived(); 

가 오류와 함께 실패 " '파생': 추상 클래스를 인스턴스화 할 수 없습니다"나는 추상 기본 클래스와 비 추상적 인 파생 클래스, 건물이 있습니다.() (더 "추상적"내가 커서 Base 위에 마우스를 올려 경우, VS는 "추상 클래스의 자료를"라는 툴팁이 나타납니다, 그러나, 주목할 가치가 없을 수도 있지만, Derived 위에 마우스 만 말한다 "클래스 파생 된"것) . 이러한 클래스의

정의는 매우 크고, 나는 각각의 방법이 무시 된 경우 검사를 수동으로 방지하고 싶습니다. VS가 어떻게 든이 일을 할 수 있습니까? 추상적으로 만드는 클래스 정의의 정확한 부분을 찾아내는 데 대한 일반적인 팁이 있습니까?

답변

7

컴파일러에서 오류 메시지를 알려야합니다. 다음 :

struct base 
{ 
    virtual void foo(void) = 0; 
    virtual void bar(void) = 0; 
}; 

struct derived : base 
{ 
    virtual void foo(void){} 
}; 

int main(void) 
{ 
    derived d; 
} 

는 생산 :

오류 C2259은 : 인해 다음과 같은 멤버로
를 추상 클래스를 인스턴스화 할 수 없습니다 :
'무효 기본 :: 바 (무효)': '파생'된다 '기본 :: 바'

의 추상적 인
참조 선언 그것은 또한 동적 할당과 같은 않습니다.

+0

사실 출력 창을 다시 확인하는 것을 잊었습니다. 기분을 상하게하는 방법이 발견되어 자신의 행동을 비난합니다. :) – suszterpatt

+0

+1 견책 방법 위반. :-) –

1

아니, VS 박스에서 이런 일을하지 생각하지 않는다. GMan의 대답을 참조하십시오.

반면에 너무 큰 기본 클래스가 있으면 가상 메서드를 신속하게 확인할 수 없으므로 해당 클래스를 분할하는 것이 좋습니다.

1

GMan이 말한 내용. 더 나은 컴파일러를 사용하십시오 :-) g ++의 경우 오류는 다음과 같습니다.

ab.cpp: In function 'int main()': 
ab.cpp:14: error: cannot declare variable 'd' to be of abstract type 'derived' 
ab.cpp:8: note: because the following virtual functions are pure within 'derived': 
ab.cpp:4: note:   virtual void base::bar() 
관련 문제