Exceptions...

Signaler
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,

Je suis en train d'apprendre les exceptions et j'ai une erreur, je ne comprends pas pourquoi.
Voici mon code:

// A simple exception-handling example that checks for
// divide-by-zero exceptions.
#include
using namespace std;

#include <exception>
using std::exception;

// DivideByZeroException objects should be thrown by functions
// upon detecting division-by-zero exceptions
class DivideByZeroException : public exception {
    public:
          // constructor specifies default error message
         DivideByZeroException::DivideByZeroException() : exception( "attempted to divide by zero" ) {}
};  // end class

// perform division and throw DivideByZeroException object if
// divide-by-zero exception occurs
double quotient( int numerator, int denominator )
{
    if ( denominator == 0 )
        throw DivideByZeroException(); // terminate function
   return numerator / denominator;
}

int main()
{
       int number1;    // user-specified numerator
       int number2;    // user-specified denominator
       double result;  // result of division
       cout << "Enter two integers";
       // enable user to enter two integers to divide
       cin >> number1 >> number2;
   
    // try block contains code that might throw exception
           // and code that should not execute if an exception occurs
           try {
              result = quotient( number1, number2 );
              cout << "The quotient is: " << result << endl;
           }
           catch ( DivideByZeroException &divideByZeroException ) {
              cout << "Exception occurred: " <<
                  divideByZeroException.what() << endl;
           }

           cout << endl;
           return 0;  /
 }

Lorsque je compile, voici l'erreur que j'ai :
[serial@localhost exception2]$ g++ *.cpp -o exception2
main.cpp:14: error: extra qualification ‘DivideByZeroException::’ on member ‘DivideByZeroException’
main.cpp: In constructor ‘DivideByZeroException::DivideByZeroException()’:
main.cpp:14: error: no matching function for call to ‘std::exception::exception(const char [28])’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/exception:57: note: candidates are: std::exception::exception()
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/exception:55: note:                 std::exception::exception(const std::exception&)

Merci de votre aide.

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne

4 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Juste un doute, mais il me semble que j'avais eu des pbs (sous VC 2005)  en mettant l'incolade sur la meme ligne que le "try", pareil pour le "catch".
Essai ca:
           try
           {
              result = quotient( number1, number2 );
              cout << "The quotient is: " << result << endl;
           }
catch ( DivideByZeroException &divideByZeroException )
          {
              cout << "Exception occurred: " <<
                  divideByZeroException.what() << endl;
           }

Enfin j'ai pas trop pris le temps de lire le post en entier, donc il se peut que ca ne change rien.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Dans ta classe pour déclarer ton constructeur n'écris pas DivideByZeroException::DivideByZeroException() mais simplement DivideByZeroException() .
La deuxième erreur devrait disparaître avec la première.
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009

Merci,

mais je viens d'essayer, et ça me donne ça :

[serial@localhost exception2]$ g++ main.cpp -o exception2
main.cpp: In constructor ‘DivideByZeroException::DivideByZeroException()’:
main.cpp:15: error: no matching function for call to ‘std::exception::exception(const char [28])’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/exception:57: note: candidates are: std::exception::exception()
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/excep

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,


Déjà, ce n'est pas le sujet, mais attention à la division ! Avec ton
code, il font une division entière, donc 1/2 = 0... (Vive le Delphi qui
propose 2 opérateurs. Mais c'est encore moins le sujet !)


VC6 a compilé le code sans problème, la remarque de juju12 enlèvant un warning.


En effet, g++ n'est pas d'accord. On dirait que la classe exception de
g++ ne propose pas de constructeur prenant une chaîne. Bah on peut s'en
sortir autrement (Testé sur VC6 et g++) :
class DivideByZeroException : public exception {
public:
virtual const char* what() const throw()
{
return "Coucou, je suis une division par zéro";
}
}; // end class

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08