¿Por qué aparece un error de discard qualifiers
:g ++: const descarta calificadores
customExc.cpp: In member function ‘virtual const char* CustomException::what() const’:
customExc.cpp: error: passing ‘const CustomException’ as ‘this’ argument of ‘char customException::code()’ discards qualifiers
en el siguiente ejemplo de código
#include <iostream>
class CustomException: public std::exception {
public:
virtual const char* what() const throw() {
static std::string msg;
msg = "Error: ";
msg += code(); // <---------- this is the line with the compile error
return msg.c_str();
}
char code() { return 'F'; }
};
He buscado en todo el SOF antes con respecto a cuestiones de simular.
Ya he agregado un const
en cada lugar posible.
favor ilumíneme - No entiendo el punto ...
EDITAR: Estos son los pasos para reproducir en Ubuntu-carmic-32 bits (g ++ v4.4.1)
- guardar ejemplo como
customExc.cpp
- tipo
make customExc.o
EDITAR: El error está relacionado con CustomException
. La clase Foo
no tiene nada que ver con eso. Así que lo he borrado.
Por cierto, no debe devolver 'msg.c_str()', ya que 'msg' se destruye tan pronto como' what() 'regrese, lo que significa que el puntero ya no será válido cuando el usuario lo lea . Es posible que desee considerar construirlo en el momento de la construcción y almacenarlo como miembro de la clase. –
@Raphael: Lo sé. Solo quería mantener el ejemplo lo más simple posible.Y, dado que el valor de retorno de 'what()' es 'const', no debería ser un problema en la práctica. –
No veo qué tiene que ver el valor de retorno de 'what()' con 'const' con la seguridad de devolver' msg.c_str() '... se garantiza que apunta a la memoria inexistente, que es comportamiento indefinido no hagas eso! – rmeador