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 :

Utilisation de fichiers � .cpp � et � .h �


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Homme Profil pro
    Hobby
    Inscrit en
    Ao�t 2002
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Hobby

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 128
    Par d�faut Utilisation de fichiers � .cpp � et � .h �
    Bonjour � tous.

    Je ne parviens pas � utiliser la variable "lcd" dans le fichier "cpp" li� au fichier "monProgramme.ino" (environnement Arduino).
    Nota : LiquidCrystal() est un constructeur disponible sur le web (lien).
    Il est normal que le main() soit cach� dans l'environnement d'Arduino !

    Fichier" monProgramme.ino"
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <LiquidCrystal.h>
    #include "mesFonctions.h"
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2); 
     
    void setup() {
    lcd.begin(16, 2);
    afficheMessage(); // Dans le fichier « .cpp ».
    }
     
    void loop() {
    }
    Fichier "mesFonctions.cpp"
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    #include "mesFonctions.h"
    extern LiquidCrystal lcd;
     
    void afficheMessage(){ 
        lcd.setCursor(0, 0); 
        lcd.print("Message");
    }
    Fichier "mesFonctions.h"

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    #include <LiquidCrystal.h>
    void afficheMessage();

    J'obtiens les erreurs suivantes :
    1. lorsque je ne mets pas "extern LiquidCrystal lcd;" dans le fichier "mesFonctions.cpp"
    mesFonctions.cpp: In function 'void afficheMessage()':
    mesFonctions.cpp:7: error: 'lcd' was not declared in this scope

    2. lorsque je mets "extern LiquidCrystal lcd;" dans le fichier "mesFonctions.cpp"
    mesFonctions.cpp.o: In function `afficheMessage()':
    mesFonctions.cpp:7: undefined reference to `lcd'
    mesFonctions.cpp:8: undefined reference to `lcd'


    Bloqu� et pas moyen de trouver la solution malgr� divers essais...
    Qui peut trouver la solution � ce probl�me ?

    Cordialement.

  2. #2
    Mod�rateur

    Avatar de Bktero
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
    Je trouve cette �criture assez bizarre en dehors d'une fonction... C'est une �criture C++ ou typique Arduino ?

  3. #3
    Mod�rateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur d'emploi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par d�faut
    Citation Envoy� par Bktero Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
    Je trouve cette �criture assez bizarre en dehors d'une fonction... C'est une �criture C++ ou typique Arduino ?
    C'est l�gal en C++ (constructeur valu�). Cela dit, c'est une instanciation globale.
    Je d�place du bon c�t�.

  4. #4
    Membre confirm�
    Homme Profil pro
    Hobby
    Inscrit en
    Ao�t 2002
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Hobby

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 128
    Par d�faut
    Bonjour,

    C'est normal. Le code utilis� pour programmer un Arduino est un m�lange de C et de C++.
    LiquidCrystal() est un constructeur qui cr�e une variable de ce type (lien).
    Les valeurs entre les parenth�ses correspondent aux pins connect�es au LCD.

    L'exemple standard est :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <LiquidCrystal.h>
     
    LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
     
    void setup()
    {
      lcd.begin(16,1);
      lcd.print("hello, world!");
    }
     
    void loop() {}
    Le probl�me semble venir du fait que le compilateur ne trouve pas la r�f�rence "lcd" alors qu'elle a �t� d�clar�e "extern".

    Cordialement.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    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 505
    Par d�faut
    C'est pas le compilateur qui crie, c'est le linker.
    Avec ton extern "machin", t'as juste truand� le compilateur, mais le linker, on ne le blouse pas aussi facilement.

    La m�thode standard (je ne connais pas Arduimachin), c'est de mettre l'externe dans le .h et un static dans le cpp.

  6. #6
    Membre confirm�
    Homme Profil pro
    Hobby
    Inscrit en
    Ao�t 2002
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Hobby

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 128
    Par d�faut
    Merci Bacelar,

    Ca ne fonctionne pas mieux pour autant.
    Je vais donc, � regrets, regrouper le code de cette fonction dans le fichier "monProgramme.ino" en attendant de trouver la solution.
    Les autres fonctions, que supprim�es pour ce post, fonctionnent sans probl�me � partir du fichier ".cpp".

    Cordialement.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    D�cembre 2010
    Messages
    734
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 734
    Par d�faut
    On peut voir la s�quence de commandes (compilation et link)? Pour savoir ce qui foire au link.

Discussions similaires

  1. utiliser le langage C dans des fichiers cpp
    Par ikuzar dans le forum D�buter
    R�ponses: 5
    Dernier message: 03/02/2011, 18h24
  2. [NASM] Utiliser des fichiers ressources
    Par trax44 dans le forum Assembleur
    R�ponses: 8
    Dernier message: 26/09/2004, 18h42
  3. Utilisation de fichiers batch
    Par shifty.net dans le forum Scripts/Batch
    R�ponses: 3
    Dernier message: 01/08/2004, 16h31
  4. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    R�ponses: 7
    Dernier message: 03/10/2003, 17h02
  5. [Turbo Pascal] Utiliser un fichier Excel
    Par Lady dans le forum Turbo Pascal
    R�ponses: 10
    Dernier message: 09/03/2003, 20h34

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