2017-11-13 2 views
0

이 코드에서 정의C++ C2509 : - 캐치

A::A() 
try: B() 
{} 
catch(Exception e) {} 

에서, 나는 C2509 오류가 있습니다. 헤더 파일에서 정의 (F12)로 이동하거나 정의에서 (Ctrl + F12)로 이동하려고하면 작동하지 않습니다.

나는
A::A() 
{ 
try 
{ B();} 
catch(Exception e) {} 
} 

을 시도했지만 B 클래스에 순수 가상 함수가 있기 때문에이 불가능하다.

나는

try: {} 
catch 

try{} 
catch 
+0

C++에서는 오류 이름이나 바로 가기가 범용 적이 지 않습니다. 질문에 오류 메시지를 포함시켜야합니다 – user463035818

+0

"B 클래스에는 순수 가상 기능이 있기 때문에 불가능합니다." 초기화 클래스 목록을 포함하여 추상 클래스를 인스턴스화 할 수 없습니다. – virgesmith

+0

@virgesmith 대답 해 주셔서 감사합니다.하지만 try {}가 아닌 'try :'다음에 추상 클래스를 초기화 할 수있는 이유는 무엇입니까? –

답변

0

지금이야 는이 경우 1) 당신이 할 수있는 명시 적 추상 initalise B.에서 파생 가정의 차이로 혼란 스러워요 2) 초기화 도구 목록에서 초기화해야합니다. 전에 전에 A :: A()가 실행되어야합니다.

이 나를 위해 작동합니다

#include <stdexcept> 

struct B 
{ 
    B() { } 
    virtual int f() = 0; 
}; 

struct A : B 
{ 
    A() try : B() { } catch(const std::exception&) { } 

    int f() { return 0; } 
}; 

int main() 
{ 
    A a; 
} 

g ++ 5.4을 사용하여. 제공하지 않은 오류를 추측합니다. B에서 A를 유도하지 않거나 두 클래스의 가상 함수 정의가 일치하지 않습니다.

+0

정말 고마워요. 당신이 가정했듯이, A는 B에서 파생됩니다. 나는 모든 가상 함수를 초기화하지 않았다는 것을 알아 냈다. 그것은 많은 도움이되었습니다. ;) –