Exceptions...

poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009 - 10 déc. 2007 à 18:50
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 déc. 2007 à 19:14
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
11 déc. 2007 à 01:20
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.
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
11 déc. 2007 à 18:10
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.
0
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
11 déc. 2007 à 19:00
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 déc. 2007 à 19: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
0
Rejoignez-nous