Je lis what-is-the-purpose-of-stdexceptionwhat et fait référence à la définition de std::exception
heredifférents types de std :: exception :: ce qui() autre que const char *
Je dois retourner un int
de std::exception::what()
comme il est virtual
mais je peux Ne pas remplacer par le type de retour. Je roulais ma propre exception classe
class BadLengthException : public std::exception
{
private:
int length;
const char* to_return;
public:
BadLengthException() = default;
BadLengthException(int new_length) : length(new_length) { to_return = new const char(length); }
~BadLengthException() = default;
const char* what() const throw() { return to_return; }
};
Comment pourrais-je être en mesure de modifier le type de retour à pur int
pour répondre à mes besoins tels que
try
{
}
catch(BadLengthException bad_length)
{
std::cout << bad_length.what() <------- Got your int value
}
Modifier J'apporté des modifications au code. Les tests montrent qu'il fournit les valeurs correctes. Puis-je améliorer ce que j'ai fait étant donné que je dois toujours retourner un const char*
?
class BadLengthException : public std::exception
{
private:
const size_t size = 2;
char ref_arr[5] = { '1','2','3','4','5' };
int length;
char* to_return;
public:
BadLengthException() = default;
BadLengthException(int new_length) : length(new_length)
{
to_return = (char*)malloc(size * sizeof(char));
to_return[0] = ref_arr[length - 1];
to_return[1] = '\0';
}
~BadLengthException() = default;
const char* what() const throw() override { return to_return; }
};
Ce n'est pas le cas. Pourquoi ne pas simplement ajouter une méthode supplémentaire? Les intercepteurs de votre exception peuvent alors dire 'bad_length.length()' ou tout autre. – GManNickG
@GManNickG Dans ce problème particulier, je résous, la sortie attendue est limitée à seulement 'std :: exception :: what()' – Mushy
_J'ai besoin d'utiliser quoi parce que je dois utiliser what_ ok –