2013-12-08 3 views
2

У меня есть класс исключения:Поймайте пользовательские исключения C++

#ifndef OBJECTEXCEPTION_H_ 
#define OBJECTEXCEPTION_H_ 

class ObjectException: public std::logic_error 
{ 
public: 
    ObjectException (const std::string& raison) 
      :std::logic_error(raison){}; 
}; 

class Object1Exception: public ObjectException 
{ 
public: 
    Object1Exception (const std::string& raison) 
    : ObjectException(raison){}; 
}; 

#endif 

У меня есть метод, который бросить это исключение:

void Object1::myMethod(int type) { 
if (type == 0) { 
    throw new Object1Exception(type); 
} 

... 
} 

Теперь я использую этот метод:

try{ 
    obj1->myMethod(0); 
} 
catch(Object1Exception& error){ 

} 

Но У меня есть эта ошибка

terminate called after throwing an instance of 'tp::Object1Exception*' 

Я не понимаю, почему исключение не поймано.

+3

Никогда не говори 'new' в C++, если вы не специалист. –

ответ

3

Код throw Object1Exception(type); без new; вы бросаете указатель на исключение, а не на само исключение.

BTW, как и прокомментированы polkadotcadaver, сообщение об ошибке было довольно ясно, что говорил вам о броске экземпляр некоторого типа указателя throwing an instance of 'tp::Object1Exception*' ....

+1

Я просто хочу указать также, что сообщение об ошибке сообщило вам именно об этом - «tp :: Object1Exception *», указателе * значения. – polkadotcadaver

Смежные вопросы