Template c++ / fonction exit()

Résolu/Fermé
Asterix2231 Messages postés 50 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 16 avril 2013 - 16 févr. 2010 à 13:57
Asterix2231 Messages postés 50 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 16 avril 2013 - 16 févr. 2010 à 16:03
Bonjour,

J'écris un programme dans lequel je définis une classe vecteur, au sens mathématique du terme, comme suit:

vecteur.h
class Vecteur{
public:
    double x,y,z;
    Vecteur(double X, double Y, double Z);
};


vecteur.cpp
Vecteur::Vecteur(double X, double Y, doubleZ){
    x = X; y = Y; z = Z;
}


Pour les besoins du programme, je surcharge l'opérateur "/" de façon à pouvoir diviser mon vecteur par un scalaire.
Afin de rester indépendant du type de mon scalaire, j'utilise une fonction template.
De même, afin de s'affranchir du problème de la division par zéro, je spécifie une condition pour fermer le programme si jamais le scalaire fourni est nul.

vecteur.cpp
template <typename Scalaire>
Vecteur& operator/(const Vecteur& V, const Scalaire S){
    if(S==0){
        cout << "Erreur: division par zéro." << endl;
        exit(EXIT_FAILURE);
    }
    else return Vecteur(V.x/S, V.y/S, V.z/S);
}


Mon problème est que g++ n'accepte pas la fonction exit(), avec ou sans argument (j'ai essayé les deux), dans une fonction template. Voici mon code d'erreur:

vecteur.cpp: In function ‘Vecteur operator/(const Vecteur&, const Scalaire&)’:
vecteur.cpp:89: error: there are no arguments to ‘exit’ that depend on a template parameter, so a declaration of ‘exit’ must be available

Quelqu'un a une suggestion sur la manière de faire quitter le programme? Est ce qu'il faut effectivement redéfinir une fonction exit()? Et dans ce cas comment fait-on, parce que là je ne saurais vraiment pas?

Merci d'avance!
A voir également:

2 réponses

Asterix2231 Messages postés 50 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 16 avril 2013 11
16 févr. 2010 à 15:45
Ok, en cherchant j'ai compris que cela venait d'un truc appelé "two-stage (or dependent) name lookup", auquel je n'ai rien compris :p

Quelq'un aurait une explication svp?

Merci!
0
Asterix2231 Messages postés 50 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 16 avril 2013 11
16 févr. 2010 à 16:03
Bon en fait j'ai trouvé, il me fallait juste rajouter #include <cstdlib> dans mon vecteur.h.

Merci moi!
0