Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Exceptions... [ Linux / Autre ] (poiuytrez3)

lundi 10 décembre 2007 à 18:50:09 | Exceptions...

poiuytrez3

Membre Club
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 <iostream>
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

mardi 11 décembre 2007 à 01:20:28 | Re : Exceptions...

luhtor

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.

mardi 11 décembre 2007 à 18:10:29 | Re : Exceptions...

juju12

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.

mardi 11 décembre 2007 à 19:00:23 | Re : Exceptions...

poiuytrez3

Membre Club
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

mercredi 12 décembre 2007 à 19:14:28 | Re : Exceptions...

rt15

Membre Club Administrateur CodeS-SourceS
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


3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08



Cette discussion est classé dans : int, exception, std, by, dividebyzeroexception


Répondre à ce message

Sujets en rapport avec ce message

gcc, prob de compilation [ par Metrox ] 'lut all, je tourne ss une debian (knoppix, pr etre precis), et j'essaie de compiler un truc tt bete, mais il me sort une erreur...que faire?!?CODE(es Utilisation de std::map avec le type void * [ par toast3r ] Bonjour, J'utilise un tableau associatif, map et j'ai un problème au niveau de la récuperation des valeurs, voici le code que j'ai actuellement : # Allocation statique ou dynamique [ par luhtor ] Bon alors, j'ai un exemple de programme. Mais je me pose la question de sa validité sachant que ce que vous allez voir. C'est correct dans certain lan pb dans la conversion d'in int en string!! [ par othland ] j'arrive pas à comprendre!quand je mets :///////////////////////////////////////std::ostringstream oss;oss mon_string = oss.str();//////////////////// Quel intérêt d'utiliser (un)signed short int en C++ ? [ par Pilotwings ] Bonjour, je voulais savoir à quoi consiste d'utiliser unsigned short int ( entier court non signé) et signed short int (entier court signé) ? Par exem Aide [ par Hellboy67 ] Voila j'ai un exo pour les cours de prog a faire dont le code source est le suivant:# include # include using std::cout;using std::cin;using std::end problème de "cout" [ par infinity7780 ] Bonjour,J'ai acheté et j'ai lu plusieurs chose sur le C++.Mais comme je débute, je doit surement me trompé.Alors voici ma question. est-ce normal que Erreur (0x80000003) - L'exception Point d'arrêt [ par nuxaly ] Bonjour, j'ai un probleme de memoire. j'essaye d'executer mon programme c++ sous visual c++ et un erreur s'affiche le voila : "L'exception Point d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.