C ++ Linker не работает, потому что я добавляю бросок - PullRequest
0 голосов
/ 26 ноября 2010

Ну, странно, что со мной происходит, но я постараюсь прояснить это. У меня есть класс и в одном методе я решаю поставить бросок (в определении hpp и в реализации cpp). так что у меня есть метод, который может генерировать исключение std ::. Здесь нет проблем.

Я создаю свое исключение:

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

хорошо, давайте использовать его в моих методах от:

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

Кому:

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

OK! это то, что я получаю

/ TMP / ccwSS5GE.o :( gcc_except_table + 0x84).: неопределенная ссылка на 'typeinfo для MyException 'collect2: ld вернул 1 статус выхода

ПОЧЕМУ ?? С std :: exception все работает нормально, теперь ничего не работает.

1 Ответ

2 голосов
/ 26 ноября 2010

Я думаю, что код OP должен выдавать ошибку компиляции, поскольку он некорректно сформирован, а не находится в зоне UB (что может объяснить ошибку компоновщика, что здесь удивительно).

Полагаю, проблема в вашей декларации.

const char what() const throw();

Тип возвращаемого значения 'const char' в вашем классе не ковариантен с типом в базовом классе std :: exception, который определяется как

virtual const char* std::exception::what()  const throw () 
...