IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Erreur concernant l'appel d'une fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut Erreur concernant l'appel d'une fonction
    Bon voici mon problème, j'essaie de développer de petit programme qui font appelle a une quelquonque fonction, par contre, je ne suis pas capable de la faire fonctionner.

    Voici mon code pour une fonction simple qui met au carré une donnée entré par l'utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
     
    using namespace std;
     
     
    int main(int argc, char** argv) {
        int a;
        cout << "entrez une valeur de X " << endl;
        cin >> a;
        cout << "la valeur de X au carre est: " << square(a) << endl;
     
     
        int square(int x);
        {
            return x*x;
        }
     
        return (0);
    Et je reçois ces deux messages d'erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    newmain1.cpp:19: erreur: ‘square’ was not declared in this scope
    newmain1.cpp:24: erreur: ‘x’ was not declared in this scope
    Quelqu'un a une idée de ce que je dois modifier pour que ma fonction soit appellé correctement?

    Merci!

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    C++ n'est pas du C : il faut au moins déclarer avant ce que tu vas utiliser après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int square(int x);
    int main(int argc, char** argv) {
        int a;
        cout << "entrez une valeur de X " << endl;
        cin >> a;
        cout << "la valeur de X au carre est: " << square(a) << endl;    
        return (0); 
    }
    int square(int x)
    {
      return x*x;
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    3DArchi, tu confonds pas C et Pascal ?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par bacelar Voir le message
    3DArchi, tu confonds pas C et Pascal ?
    Pas tout à fait. Longtemps, en C, le code suivant a été valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int main(int argc, char** argv) {
        int a =2;
        printf("square(%d) = %d\n",a,square(a));
        return (0);
    }
        int square(int x)
        {
            return x*x;
        }
    Je ne me souvient pas si maintenant (C ansi), c'est toujours autorisé.
    [EDIT] : je suis en train de galérer à porter en C++ du vieux code C qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int square()
    int x;
    {
       return x*x;
    }

  5. #5
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Pas tout à fait. Longtemps, en C, le code suivant a été valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int main(int argc, char** argv) {
        int a =2;
        printf("square(%d) = %d\n",a,square(a));
        return (0);
    }
        int square(int x)
        {
            return x*x;
        }
    Parce que ce code est valide en C.
    Mais on est pas en C, mais en C++...

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par bacelar Voir le message
    3DArchi, tu confonds pas C et Pascal ?
    Citation Envoyé par Flob91 Voir le message
    Parce que ce code est valide en C.
    Non, 3D ne confond pas, oui, le code est valide en C...

    Meme selon la norme ANSI C

    Par contre, effectivement, il fut un temps où la définition de fonction imbriquées était tout à fait légale en C...

    Maintenant, nous n'avons d'ailleurs droit qu'à un avertissement avec ISO C
    Mais on est pas en C, mais en C++...
    Effectivement, et là est toute la différence:

    C++ n'a jamais admis aucune de ces deux pratiques

    [EDIT]En fait, c'est même plus viscieux que cela...

    Si tu compile en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char** argv) {
     
        int square(int x)
        {
            return x*x;
        }
        int a =2;
        printf("square(%d) = %d\n",a,square(a));
        return (0);
    }
    avec uniquement le flag -ansi, il acceptera, sans même un avertissement.

    Par contre, si tu compile en C, et toujours uniquement avec le flag -ansi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char** argv) {
     
        int a =2;
        printf("square(%d) = %d\n",a,square(a));
        int square(int x)
        {
            return x*x;
        }
        return (0);
    }
    le compilateur te jettera au motif que
    static declaration of 'square' follows non-static declaration|
    (avec meme un avertissement avant selon lequel tu as une déclaration implicite de square à la ligne du printf)

    Enfin, "tout ce que tu risque", en C, à tenter de compiler avec le flag -ansi le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(int argc, char** argv) {
     
        int a =2;
        printf("square(%d) = %d\n",a,square(a));
        return (0);
    }
        int square(int x)
        {
            return x*x;
        }
    C'est un banal avertissement
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Erreur #Value suite appel d'une fonction Vb
    Par bru.antoine dans le forum Excel
    Réponses: 3
    Dernier message: 13/08/2012, 09h19
  2. Réponses: 4
    Dernier message: 30/08/2007, 18h08
  3. Réponses: 2
    Dernier message: 05/03/2006, 19h29
  4. Réponses: 2
    Dernier message: 01/11/2005, 18h47
  5. Erreur a l'appel d'une fonction javascript
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/03/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo