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.

È stato utile?

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 () 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top