2010-11-26 3 views
0

글쎄, 나에게 무슨 일이 일어나고 있는지 이상하게 들리지만, 분명히하려고 노력할 것입니다. 클래스를 가지고 있으며 한 가지 방법으로 던지기 (hpp 정의와 cpp 구현)를 결정합니다. 그래서 std :: exception을 던질 수있는 메서드가 있습니다. 여기 아무 문제 없습니다.throw를 추가하기 때문에 C++ 링커가 작동하지 않습니다.

class myclass { 
    void mymethod() throw(std::exception); 
} 

하려면 :

class MyException : public std::exception { 
public: 
    MyException() throw(); 
    ~MyException() throw(); 
    const char what() const throw(); 
} 

확인,의 나의 방법에에서 를 사용하자 :

class myclass { 
    void mymethod() throw(MyException); // I have included hpp file where MyException is defined 
} 

OK

나는 내 예외를 만들! 이 내가)

/tmp/ccwSS5GE.o:(.gcc_except_table+0x84을 얻을 것입니다 : ' MyException에 대한 소속 카테고리'에 정의되지 않은 참조가 collect2 : ld에 반환 한 종료 상태

왜?? std :: exception을 사용하면 모든 것이 정상적으로 작동하지만 아무 것도 작동하지 않습니다.

+2

으로 정의 된 기본 클래스 표준 : : 예외의 하나 공변되지 않은 클래스의 반환 형식 'CONST 문자'(HTTP [이 스레드는 도움이 될 것입니다]를 : //stackoverflow.com/questions/307352/g-undefined-reference-to-typeinfo). 특별히 [Tyler McHenry 's answer] (http://stackoverflow.com/questions/307352/g-undefined-reference-to-typeinfo/307440#307440)를 확인하십시오. 여전히 해결할 수 없다면 코드를 모두 보여주십시오. 그리고 어떻게 사용하려고하는지. – birryree

+5

링커가 중단되지 않았습니다. 그것은 단순히 당신의 프로그램에 오류를보고했다. –

+1

링크 명령은 유닉스에서 역할을합니다. 그거 알아? – Muggen

답변

2

Op 코드는 UB 영역 (여기서는 놀라운 링커 오류를 설명 할 수 있음)이 아니기 때문에 컴파일 오류가 발생한다고 생각합니다.

문제는 귀하의 신고 사항입니다.

const char what() const throw(); 

virtual const char* std::exception::what() const throw() 
+0

글쎄, 당신의 제안에 감사드립니다. 나는 char * 인 그 char를 타이프하는 것을 유감스럽게 생각한다 !! 글쎄, 결국 그것을 해결할 수 있지만 이상한, 그 방법에 대한 구현과 함께 cpp 파일을 만들지 않았을 수도 있습니다, 어쩌면 이것은 컴파일러가 정말로 화를 낼 때 던지기를 만났을 때 그 예외의 요소를 찾고 있었기 때문입니다 유형, 그는 좋은 구현을 찾지 못했고 미쳤어. 좋은 설명이라고 생각합니까? – Andry

관련 문제