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 :

Néophyte : passage de vecteur en fonction externe


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Retraité de l'informatique
    Inscrit en
    Octobre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité de l'informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Néophyte : passage de vecteur en fonction externe
    Bonjour à tous,

    Je suis absolument néophyte, mais j'essaie de comprendre et d'apprendre...

    Dans la progression de ce que je fais je voudrais utiliser un vecteur (vector) dans une fonction.

    Si je passe le vecteur dans une fonction "interne" je en rencontre aucune difficulté :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <iostream>
    #include <string>
    #include "fonctionsExternes.h"
     
    #include <vector> //Ne pas oublier !
     
     
    using namespace std;
     
     
     
    void chargementVecteur( double table[], int tailleTable, vector<double> & mon_score)
    {
        for (int i=0 ; i < tailleTable ; ++i)
        {
            mon_score.push_back(table[i]+1);
            cout << "vecteur[" << i << "] = " << mon_score[i] << endl;
            cout << "taille du vecteur = " << mon_score.size() << " capacite du vecteur = " << mon_score.capacity() << endl;
     
        }
        return;
    }
     
    void moyenneVecteur(vector<double> & mon_score)
    {
        float moyenneV(0);
            for (unsigned int j(0); j<mon_score.size(); ++j)
            {
                cout << "score" << j <<" : " << mon_score[j] << endl;
                moyenneV = moyenneV + mon_score[j];
                cout << "moyenneV = " << moyenneV << endl;
            }
     
            cout << "taille du vecteur : " << mon_score.size() << endl;
            cout << "somme actuelle : " << moyenneV << endl;
     
            moyenneV /= mon_score.size();
     
            // cout << "Dont la moyenne est : " << moyenneV << endl;
     
            cout << "Calcul de la moyenne a la sauce vector..." << endl;
            cout << "moyenne calculee par vecteur : " << moyenneV << endl;
    }
     
     
     
     
    int main()
     
    {
     
     
    // Calcul de la moyenne à la sauce vector dans main...
     
        // définition de mon vecteur
        int i=0;
        vector<double> score;
     
        // Declaration du tableau
        int const tailleTableau(6);
        double tableau[tailleTableau];
     
        tableau[0] = 15.2;
        tableau[1] = 10.8;
        tableau[2] = 6.7;
        tableau[3] = 11.3;
        tableau[4] = 8.9;
        tableau[5] = 13.7;
     
     
        // Passage de fonction
        // on va passer tableau[], tailleTableau et score
     
        chargementVecteur( tableau, tailleTableau, score);
     
        //double moyenneV(0);
     
        moyenneVecteur(score);
     
        return 0;
    }

    Maintenant si je veux passer ma fonction dans un fichier externe "fonctionsExternes.cpp" et "fonctionsExternes.h"

    Dans main.cpp je commente la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /*
    void chargementVecteur( double table[], int tailleTable, vector<double> & mon_score)
    {
        for (int i=0 ; i < tailleTable ; ++i)
        {
            mon_score.push_back(table[i]+1);
            cout << "vecteur[" << i << "] = " << mon_score[i] << endl;
            cout << "taille du vecteur = " << mon_score.size() << " capacite du vecteur = " << mon_score.capacity() << endl;
     
        }
        return;
    }
    */
    Et je l'ajoute dans "fonctionsExternes.cpp" et sa déclaration (prototype ?) dans "fonctionsExternes.h" :

    fonctionsExternes.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
     
    #include <iostream>
    #include <string>
    #include <vector>
    #include "fonctionsExternes.h"
     
    using namespace std;
     
    void chargementVecteur( double table[], int tailleTable , vector<double> & mon_score)
    {
        for (int i=0 ; i < tailleTable ; ++i)
        {
            mon_score.push_back(table[i]+1);
            cout << "vecteur[" << i << "] = " << mon_score[i] << endl;
            cout << "taille du vecteur = " << mon_score.size() << " capacite du vecteur = " << mon_score.capacity() << endl;
     
        }
        return;
    }
    Et le déclare dans fonctionsExternes.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef FONCTIONSEXTERNES_H_INCLUDED
    #define FONCTIONSEXTERNES_H_INCLUDED
     
     
    void chargementVecteur( double table[], int tailleTable, vector<double> & mon_score);
     
    #endif // FONCTIONSEXTERNES_H_INCLUDED
    Et alors en compilation j'ai les messages suivants ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    -------------- Build: Debug in Test (compiler: GNU GCC Compiler)---------------
     
    mingw32-g++.exe -Wall -fexceptions -g  -c "D:\Test\Test\fonctionsExternes.cpp" -o obj\Debug\fonctionsExternes.o
    In file included from D:\Test\Test\fonctionsExternes.cpp:4:0:
    D:\Test\Test\fonctionsExternes.h:5:58: error: 'vector' has not been declared
    D:\Test\Test\fonctionsExternes.h:5:64: error: expected ',' or '...' before '<' token
    Process terminated with status 1 (0 minute(s), 0 second(s))
    2 error(s), 0 warning(s) (0 minute(s), 0 second(s))
    Je en comprends pas pourquoi.
    J'ai essayé avec des passages de référence, des écritures diiférentes...

    Je ne trouve pas dans les forums d'explication.

    Merci d'avance pour votre aide ..

    Philippe

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    tres simple : D:\Test\Test\fonctionsExternes.h:5:58: error: 'vector' has not been declared et c'est normal puisque c'est std::vector qui existe, et qui necessite d'inclure vector.
    Evite les using namespace, ca t'aidera a localiser ou se trouve les elements que tu essayes d'utiliser.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Retraité de l'informatique
    Inscrit en
    Octobre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité de l'informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    tres simple : D:\Test\Test\fonctionsExternes.h:5:58: error: 'vector' has not been declared et c'est normal puisque c'est std::vector qui existe, et qui necessite d'inclure vector.
    Evite les using namespace, ca t'aidera a localiser ou se trouve les elements que tu essayes d'utiliser.
    Merci pour la rapidité de la réponse...

    J'ai mis std:: devant les déclaration de vecteurs dans .cpp et .h...

    Mais maintenant j'ai n autre comportement à la compilation :

    Dans fonctionsExternes.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
     
    //using namespace std;
     
     
     
    void chargementVecteur( double table[], int tailleTable , std::vector<double> & mon_score)
    {
        for (int i=0 ; i < tailleTable ; ++i)
        {
            mon_score.push_back(table[i]+1);
            std::cout << "vecteur[" << i << "] = " << mon_score[i] << std::endl;
            std::cout << "taille du vecteur = " << mon_score.size() << " capacite du vecteur = " << mon_score.capacity() << std::endl;
     
        }
        return;
    Dans fonctionsExternes.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void chargementVecteur( double table[], int tailleTable, std::vector<double> & mon_score);
    Et à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    In file included from D:\Projet das Boot\Test\Test\main.cpp:3:0:
    D:\Test\Test\fonctionsExternes.h:5:63: error: 'std::vector' has not been declared
    D:\Test\Test\fonctionsExternes.h:5:69: error: expected ',' or '...' before '<' token
    D:\Test\Test\main.cpp: In function 'int main()':
    D:\Test\Test\main.cpp:74:53: error: cannot convert 'std::vector<double>' to 'int' for argument '3' to 'void chargementVecteur(double*, int, int)'
    De nouvelles erreur sont apparues...

    Cordialement

    Philippe

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Test\Test\fonctionsExternes.h:5:63: error: 'std::vector' has not been declared
    Cette erreur veut tout simplement dire que le compilateur ne connais pas "std::vector" et donc ne sait pas comment interpréter cet objet. Ceci vient du fait que tu es oublié d'ajouter #include <vector> dans ton fichier d'entête.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Retraité de l'informatique
    Inscrit en
    Octobre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité de l'informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par darkman19320 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Test\Test\fonctionsExternes.h:5:63: error: 'std::vector' has not been declared
    Cette erreur veut tout simplement dire que le compilateur ne connais pas "std::vector" et donc ne sait pas comment interpréter cet objet. Ceci vient du fait que tu es oublié d'ajouter #include <vector> dans ton fichier d'entête.

    Merci,

    Mais si pourtant...

    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
     
    #include <iostream>
    #include <string>
    #include <vector>
    #include "fonctionsExternes.h"
     
    //using namespace std;
     
    void chargementVecteur( double table[], int tailleTable, std::vector<double> & mon_score)
    {
        for (int i=0 ; i < tailleTable ; ++i)
        {
            mon_score.push_back(table[i]+1);
            std::cout << "vecteur[" << i << "] = " << mon_score[i] << "  tableau[" << i << "] = " << table[i] << std::endl;
            std::cout << "taille du vecteur = " << mon_score.size() << " capacite du vecteur = " << mon_score.capacity() << std::endl;
     
        }
        return;
    }
    Je bloque

    Ou alors c'est vector::vector ?

  6. #6
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    L'erreur est dans fonctionsExternes.h, non fonctionsExternes.cpp.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Retraité de l'informatique
    Inscrit en
    Octobre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité de l'informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    L'erreur est dans fonctionsExternes.h, non fonctionsExternes.cpp.

    Ca marche beaucoup mieux comme ça !!!
    Merci pour vos réponses.

    Je ne savais pas qu'on devait mettre les includes aussi dans le fichier d'en-tête .h

    C'est comme ça qu'on apprend

    Je clos le topic.

    MERCI

    Philippe

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

Discussions similaires

  1. [WD20] Passage de paramètre à la fonction "ouvre" en langage externe
    Par tunizar dans le forum WinDev
    Réponses: 3
    Dernier message: 13/11/2015, 13h57
  2. Réponses: 13
    Dernier message: 13/10/2005, 16h03
  3. passage de resultat de fonction entre deux .h
    Par zmatz dans le forum C++
    Réponses: 5
    Dernier message: 01/10/2005, 22h50
  4. Réponses: 13
    Dernier message: 20/06/2005, 14h13
  5. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17

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