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 :

lecture d'une variable d�clar�e dans un autre .cpp


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    2 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 2 051
    Par d�faut lecture d'une variable d�clar�e dans un autre .cpp
    Bonjour tous,
    d�sol� pour ce titre pas tr�s clair .
    je vais d�tailler mon probl�me assez pr�cisement car j'ai l'impression d'avoir fait une b�tise quelque part:

    Attention: je suis d�butant donc ne vous affolez pas si mon erreur est tr�s b�te

    1�) Voici mes .cpp et leurs objectifs:

    main.cpp: lance une fonction contenu dans LLL.cpp
    LLL.cpp:
    - on d�clare un vector VVV qui va contenir des objets de type OOO
    - ensuite on lit un fichier texte et on classe des valeurs dans OOO

    OOO.cpp: permet de definir le type d'objet et de faire une methode: get_VALEURE
    calcul.cpp: fait des calculs � partir de la valeur contenu dans 000

    2�) mon probl�me:

    mon probl�me est dans calcul.cpp, je n'arrive pas � lire la valeur que j'ai ins�r� dans mon objet, voila ce que j'ai fait:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    valeur=VVV[0].get_VALEURE();
    et voila le message d'erreur:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    VVV was not declared in this scope
    3�) tentative de resolution:

    ==> je me suis dit qu'il fallait mettre dans calcul.cpp la commande:
    car c'est dans LLL.cpp que le vector VVV a �t� d�clar�

    mais ca ne fonctionne toujours pas

    ==> j'ai donc fait un test en inserant la commande
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    valeur=VVV[0].get_VALEURE();
    dans mon fichier LLL.cpp

    et l� ca fonctionne

    4�) mon probl�me:

    Je ne veux pas avoir acces � la valeure dans LLL.cpp mais dans calcul.cpp
    mais comment dois je faire ?

    j'espere que vous pourrez m'aider...

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Pour commencer VVV est-elle une variable globale ou est-elle d�clar� dans une de tes fonction ? Si c'est une variable globale il faut la definir quelque part(dans un .cpp) et utiliser le mot-cl� extern pour la decarer dans tes autre fichier sources et la rendre accessible :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // fichier1.cpp, chez toi LLL.cpp
    // definition
    int maGlobale = 0;
     
    // fichier2, chez toi calcul.cpp
    // declaration
    extern int maGlabole;
    Si elle est d�clar�e dans une fonction et que tu veux la passer � une autre fonction... les argument sont l� pour :
    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
     
    //fichier1.cpp, chez toi LLL.cpp
    #include "fichier2.hpp"
    void fonctionAppelant()
    {
         int maVariable = 42;
         fonctionAppelee(maVariable);
    }
     
    // fichier2.hpp, declaration de fonctionAppelee, chez toi calcul.hpp
    void fonctionAppellee(int arg); 
     
    // fichier2.cpp, definition de fonctionAppelee, chez toi calcul.cpp
    #include "fichier2.hpp"
    void fonctionAppellee(int arg)
    {
       int valeurDeLArgument = arg;
    }
    Je te d�conseille quand meme fortement l'utisation d'une variable globale, mais bon sans une minimum de code(d�claration de ta fonction,...) je ne pense pas pouvoir t'aider plus

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    2 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 2 051
    Par d�faut
    non je n'ai pas d�clar� comme une variable globale c'est peut etre pour cela que ca ne fonctionne pas...

    peux tu me dire quels sont les problemes li�s au variables globales ?


    (pour le code je peux le mettre en ligne mais il faut que j'effectue des retouches car je ne peux pas tout montrer)

    je vais regarder tout cela de plus pret

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    2 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 2 051
    Par d�faut
    j'ai essayer de declarer en tant que variable globale mais voici le message d'erreur qui est apparu:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    "no match for operator [] in VVVList[0]"
    je crois que le plus simple est de pr�senter mon code et ce que je veux faire, voici mon code:

  5. #5
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    2 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 2 051
    Par d�faut
    main.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>  
    #include "Lecture.h"
    #include "Calcul.h"
    using namespace std;
    int main()
    {
        Lecture();
        Calcul();
    }
    lecture.h
    lecture.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
    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
    #include <iostream>      
    #include <fstream>        
    #include <sstream>       
    #include <vector>        
    #include "AAA.h"
    #include "BBB.h"
    using namespace std;
    vector <AAA> AAAList;    
    vector <BBB> BBBList;
     
    void Lecture()
    {
        string mon_fichier = "data.txt";
        ifstream dataBase(mon_fichier.c_str(), ios::in);    
        if(dataBase)                                          
        {
            while (!dataBase.eof())                            
            {
                  if (!dataBase.eof())
                  {
                      string command, dump, sub, trash;
                      int i=0;                                  //initailize 2 string
                      dataBase >> command;                      //we read the first word, with >> we scroll in the file word by word
                      if (command=="#")
                     {
                          getline(dataBase,dump);               //put the line in the variable dump
                          cout << dump << endl;
                          istringstream iss(dump);              //to cut the in words
                          while (iss)
                          {
                                iss >> sub;                     //to enumerate the nomber of word
                                i=i+1;
                           }
     
                      }
                      else if (command=="aaa")
                      {
                          string AAAName;
                          double x, y, z;
                          dataBase >> AAAName;     
                          dataBase >> x;
                          dataBase >> y;
                          dataBase >> z;
     
                          AAAList.push_back( AAA (AAAName,x,y,z) ); 
     
                       }
                       else if (command=="BBB")
                       {
                          string BBBName;
                          double X,Y,Z;
                          dataBase >> X;
                          dataBase >> Y;
                          dataBase >> Z;
     
                          BBB.push_back( BBB (BBBName,X,Y,Z) );
     
                       }
                    }
                    else
                    {
                        break;           //stop the loop if we are at the end of the file
                    }
                }
            }
            else
            {
                 cout << "Impossible d'ouvrir le fichier !" << endl;
            }
            dataBase.close();                                       // close dataBase file
    }
    AAA.h
    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
    class AAA
    {
            public:
                    AAA(std::string,double,double, double);
                    ~AAA();
                    std::string get_AAAName() const;
                    double get_x() const;
                    double get_y() const;
                    double get_z() const;
     
            private:
                    std::string AAAName;
                    double x;
                    double y;
                    double z;
    };
    AAA.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <iostream>
    #include <fstream>
    #include "Matrix.h"
    using namespace std;
    AAA::AAA(string _AAAName, double _x, double _y, double _z)
    {
            AAAName=_AAAName;
            x=_x;
            y=_y;
            z=_z;
    }
     
    AAA::~AAA()
    {
     
    }
     
    string AAA::get_AAAName() const
    {
        return AAAName;
    }
     
    double AAA::get_x() const
    {
         return x;
    }
     
    double AAA::get_y() const
    {
        return y;
    }
     
    double AAA::get_z() const
    {
        return z;
    }
    calcul.h
    void Calcul();
    calcul.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>  
    #include <vector>          
    #include "AAA.h"
    #include "BBB.h"
     
    using namespace std;
    double variable=0;
    void Calcul()
    {
     
        variable=AAAList[0].get_x();
     
    }

  6. #6
    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 : 51
    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
    Donc AAAList est une variable globale.

    Pour qu'elle soit accessible dans un autre fichier, comme l'a dit Joe, il faut dans ton lecture.h ajouter :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    extern std::vector <AAA> AAAList;
    (et d�placer les #include de AAA pour qu'ils soient dispos dans lecture.h)

    Apr�s, une variable globale, son plus gros probl�me, c'est que comme elle peut �tre modifi�e de n'importe o�, on se retrouve � ne plus savoir pourquoi elle a une certaine valeur � un moment donn�.
    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.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 02/03/2012, 09h44
  2. R�ponses: 9
    Dernier message: 19/03/2010, 08h15
  3. [PHP 5.0] appel d'une variable global dans un autre fichier � partir d'une classe
    Par andry.aime dans le forum Langage
    R�ponses: 1
    Dernier message: 13/01/2009, 09h31
  4. acc�der � une variable d�clar�e dans un autre fichier
    Par sg.forums dans le forum Servlets/JSP
    R�ponses: 4
    Dernier message: 31/10/2006, 09h20
  5. Utilisation d'une Variable(Vb) dans d'autre language
    Par cach dans le forum VB 6 et ant�rieur
    R�ponses: 5
    Dernier message: 22/02/2005, 12h00

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