Il linker C++ fallisce perché aggiungo un tiro
-
28-09-2019 - |
Domanda
Beh, è davvero strano quello che mi sta succedendo, ma cercherò di chiarirlo.Ho una classe e in un metodo decido di inserire un lancio (nella definizione hpp e nell'implementazione cpp).quindi ho il mio metodo che può generare un'eccezione std::exception.Qui nessun problema.
Creo una mia eccezione:
class MyException : public std::exception {
public:
MyException() throw();
~MyException() throw();
const char what() const throw();
}
Ok, usiamolo nei miei metodi da:
class myclass {
void mymethod() throw(std::exception);
}
A:
class myclass {
void mymethod() throw(MyException); // I have included hpp file where MyException is defined
}
OK!questo è quello che ottengo
/tmp/ccwSS5GE.o:(.gcc_eccetto_tabella+0x84):Riferimento indefinito a 'typeinfo per myexception' collect2:LD ha restituito 1 stato di uscita
PERCHÉ??Con std::exception tutto funziona bene, ora niente funziona bene.
Soluzione
Penso che il codice OP dovrebbe fornire un errore di compilazione poiché non è formato correttamente e non si trova nella zona di UB (il che potrebbe spiegare l'errore del linker che qui è sorprendente).
Immagino che il problema sia la tua dichiarazione.
const char what() const throw();
Il tipo restituito 'const char' nella tua classe non è covariante con quello nella classe base std::exception che è definita come
virtual const char* std::exception::what() const throw ()