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 avec un .h.cpp sur un vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    sans emploi
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut erreur avec un .h.cpp sur un vector
    Bonjour
    Je voudrais essayer de decouper mon code en fonction dans un même projet.
    Le code de base fonctionne à savoir :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <iostream>
    #include <vector>
    using namespace std;
     
    double moyenneTabDynamique(vector<double>tableau)
    {
        double moyenne;
        for (int i(0);i<tableau.size;i++)
        {
            moyenne+=tableau[i];
        }
        moyenne/=tableau.size;
        return moyenne;
    }
     
    int main()
    {
     
        vector<double>tableauNoteUserDynamique;
        char userChoice;
        do
        {
            cout<<"Veuillez entrer votre note : "<<endl;
            double noteUser(0);
            cin>>noteUser;
            tableauNoteUserDynamique.push_back(noteUser);
            cout<<"Avez vous d'autres note a enregistrer yes(y) no (n)"<<endl;
            cin>>userChoice;
        }while(userChoice=='y');
        moyenneTabDynamique(tableauNoteUserDynamique);
        return 0;
    }
    ensuite j'ai découper comme suit :
    =========main.cpp==========
    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
    19
    20
    21
    22
    23
    #include <iostream>
    #include <vector>
    #include "moyenneTabUserDynamique.h"
     
    using namespace std;
     
    int main()
    {
     
        vector<double>tableauNoteUserDynamique;
        char userChoice;
        do
        {
            cout<<"Veuillez entrer votre note : "<<endl;
            double noteUser(0);
            cin>>noteUser;
            tableauNoteUserDynamique.push_back(noteUser);
            cout<<"Avez vous d'autres note a enregistrer yes(y) no (n)"<<endl;
            cin>>userChoice;
        }while(userChoice=='y');
        moyenneTabDynamique(tableauNoteUserDynamique);
        return 0;
    }
    ==========moyenneTabUserDynamique.cpp====================
    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
    /*fonction de moyenne sur un tableau dynamique
    *-tableau : nom du tableau dynamique
    *-taille tableau : obtenu par la fonction size
    */
    #include "moyenneTabUserDynamique.h"
     
    double moyenneTabDynamique(vector<double>tableau)
    {
        double moyenne;
        for (int i(0);i<tableau.size;i++)
        {
          moyenne+=tableau[i];
        }
        moyenne/=tableau.size;
        return moyenne;
    }
    =============moyenneTabUserDynamique.h===============
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef MOYENNETABUSERDYNAMIQUE_H_INCLUDED
    #define MOYENNETABUSERDYNAMIQUE_H_INCLUDED
     
    double moyenneTabDynamique(vector<double>tableau);
     
    #endif // MOYENNETABUSERDYNAMIQUE_H_INCLUDED
    Selon mes maigres connaissance cela me semblait correcte mais mon compilateur me hurle un :

    ||=== Build: Debug in moyenneTabUserDynamique (compiler: GNU GCC Compiler) ===|
    D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\moyenneTabUserDynamique.h|4|error: 'vector' was not declared in this scope|
    D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\moyenneTabUserDynamique.h|4|note: suggested alternative
    D:\codeblock\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|214|note: 'std::vector'|
    D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\moyenneTabUserDynamique.h|4|error: expected primary-expression before 'double'|
    D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\main.cpp||In function 'int main()'
    D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\main.cpp|21|error: 'moyenneTabDynamique' cannot be used as a function|
    ||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    Il s'emblerait qu'il y est un problème dans la ligne 4 du .h mais je n'arrive pas a trouver la raison
    J'ai effectuer la même procédure sur un tableau statique sans problème.
    Merci d'éclairer ma lanterne.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le compilateur ne te hurle pas dessus, il t'informe calmement et en toute objectivité (et ce n'est pas une simple plaisanterie de dire ça, c'est un état d'esprit à avoir. Si on voit une erreur de compilateur comme une sanction, on ne va pas vraiment la lire, essayer de la comprendre. Alors que si on la voit comme une aide, on y arrive mieux).
    Et il te donne même gentiment un conseil avisé : 'vector' was not declared in this scope note: suggested alternative: 'std::vector'. Je ne vois pas trop ce qu'il y a à ajouter...

    Remplace dans ton .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double moyenneTabDynamique(vector<double>tableau);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double moyenneTabDynamique(std::vector<double>tableau);
    Et ça ira déjà mieux.
    Sinon, tu as un autre souci : Tel qu'il est écrit, ton .h va marcher dans le main.cpp, mais pas dans le moyenneTabUserDynamique.cpp. Pourquoi ? Parce que dans le main.cpp, tu inclues <vector> avant d'inclure ton .h, et que ce dernier en a besoin. La bonne solution ne consiste pas à ajouter <vector> dans tous les .cpp qui incluent ce .h, c'est vite ingérable, mais plutôt de te débrouiller que ton .h soit autonome, et puisse être inclus sans préalable à partir de n'importe où. Ajoute donc
    Dans ton .h (juste après les include guards).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre actif
    Homme Profil pro
    sans emploi
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut merci
    Je vais essayer ceci tout de suite et si le problème est résolu alors je pourrai voir le dernier
    élément du chapitre 8 les tableau multi-dimensionnelle et les strings comme tableau
    Pour le
    j'ai encore du travail a faire pour assimiler cette éléments qui me parais encore obscure à mon niveau.
    et en ce qui concerne les (includes guards) je suppose qu'il s'agit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     #ifndef MOYENNETABUSERDYNAMIQUE_H_INCLUDED
    #define MOYENNETABUSERDYNAMIQUE_H_INCLUDED
    Merci pour l'aide apporté, je tente toujours de comprendre ce que me dit le compilateur quand il
    parle en rouge mais la pour le coup le std:: je voyais pas.

  4. #4
    Membre actif
    Homme Profil pro
    sans emploi
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Par défaut tres bien
    J'ai effectuer les modification donc c'est parti pour la suite
    Encore 42 chapitre et je serais un programmeur C++
    Je clôture et merci pour ces éclaircissements.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur avec OpenCV 2.4 sur Dev-C++
    Par ezzahout dans le forum OpenCV
    Réponses: 0
    Dernier message: 22/04/2013, 20h51
  2. Réponses: 2
    Dernier message: 27/06/2011, 11h52
  3. Réponses: 2
    Dernier message: 24/08/2008, 18h58
  4. erreur avec dev cpp
    Par rimbaut dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 25/02/2006, 16h21
  5. erreur avec la fonction putfile() sur connexion FTP
    Par stefane1981 dans le forum C++
    Réponses: 2
    Dernier message: 23/09/2005, 09h13

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