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

Langage C++ Discussion :

Problème avec paramètre d'une fonction (classe)


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Problème avec paramètre d'une fonction (classe)
    Bonjour,

    je suis entrain d'écrire un programme contenant trois classes (Point, Vecteur, objet). J'essaye de faire une fonction qui prend pour paramètre un pointeur objet, mais j'ai une erreur à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    make
    g++    -c -o main.o main.cpp
    In file included from objet.h:9,
                     from main.cpp:9:
    fonctions.h:4: error: variable or field ‘CalculForceAcceleration’ declared void
    fonctions.h:4: error: ‘objet’ was not declared in this scope
    fonctions.h:4: error: ‘o’ was not declared in this scope
    fonctions.h:4: error: expected primary-expression before ‘const’
    main.cpp: In function ‘int main()’:
    main.cpp:57: error: ‘CalculForceAcceleration’ was not declared in this scope
    make: *** [main.o] Erreur 1
    Voici en gros la structure du programme :
    Les classes Point, Vecteur et objet sont contenues dans les fichiers Point.h, Point.cpp, Vecteur.h, Vecteur.cpp, objet.h et objet.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fonctions.h
     
    #ifndef _fonctions_H_
    #define _fonctions_H_
     
    void CalculForceAcceleration(objet *, const int &);
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fonctions.cpp
     
    #include "Point.h"
    #include "Vecteur.h"
    #include "objet.h"
    using namespace std;
     
    void CalculForceAcceleration(objet * o, const int & N)
    {
    ...
    }
    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
    main.cpp
     
    #include <iostream>
    ...
    #include "Point.h"
    #include "Vecteur.h"
    #include "objet.h"
    #include "fonctions.h"
    using namespace std;
     
    int main()
    {
    ...
    	CalculForceAcceleration(o,N);
    ...
    }
    Je n'arrive pas à trouver mon erreur. Merci d'avance pour votre aide.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Comme l'indique le compilateur
    fonctions.h:4: error: ‘objet’ was not declared in this scope
    dans le fichier fonctions.h, le type ‘objet’ est inconnu, il faut ajouter un include de "objet.h".

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    d'après le message d'erreur fonctions.h est inclue dans objet.h avant qu'objet soit défini

    en dehors du fait que ces includes me semble dans un curieux ordre (j'aurais plutôt vu fonctions.h inclure objet.h si cela est necessaire ou simplement déclarer objet) il suffit de déclarer objet avant la déclaration de CalculForceAcceleration

    [edit]collision avec la réponse précédante faite en même temps [/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses.

    J'ai enlevé le
    #include "fonctions.h"
    du fichier objet.h et j'ai ajouté
    #include "objet.h"
    au fichier fonctions.h

    Mais voici le nouveau message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    g++    -c -o main.o main.cpp
    main.o: In function `main':
    main.cpp:(.text+0x358): undefined reference to `CalculForceAcceleration(objet*, int const&)'
    objet.o: In function `objet::RK1(double, int, int, objet*, int const&)':
    objet.cpp:(.text+0x13c7): undefined reference to `CalculForceAcceleration(objet*, int const&)'
    collect2: ld returned 1 exit status
    make: *** [ex] Erreur 1

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    j'ai du mal à croire que la commande soit g++ -c -o main.o main.cpp car dans ce cas il n'y aurait pas d'édition de lien

    en tout cas l'erreur vous dit que vous avez oublié de donner fonctions.cpp (ou son binaire)
    dans la commande de fabrication de l'exécutable

    je dirai donc que vous avez fait g++ main.cpp objet.cpp ou équivalent au lieu de g++ main.cpp objet.cpp fonctions.cpp
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Toutes les commandes n'apparaissent pas dans le terminal

    Edition :
    j'avais oublié fonctions.o dans le makefile
    Voici mon nouveau makefile

    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
    all:ex
     
    CC= g++
    link= -o
    arg= -c -o
     
    objets= main.o Point.o Vecteur.o objet.o fonctions.o
     
    ex: ${objets}
    	@${CC} ${link} ex ${objets}
     
    %.o: %.cpp %.h
    	@${CC} ${arg} $@ $<
     
    clean:
    	@rm -f *~ *.o
     
    mrproper: clean
    	@rm -f ex
    Je me retrouve à nouveau avec la même erreur que précédemment.

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    même si je n'y crois pas vraiment vu ce qui précède faites quand même un 'make clean' puis de nouveau 'make', car les dépendances n'existent ici qu'entre un .cpp et son .h, pas via à vis des autres .h

    si cela ne marche pas donnez le résultat des deux commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nm main.o | grep CalculForceAcceleration
    nm fonctions.o | grep CalculForceAcceleration
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    J'ai fais un certain nombre de make clean, sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    make
    g++    -c -o main.o main.cpp
    In file included from objet.h:9,
                     from main.cpp:9:
    fonctions.h:6: error: variable or field ‘CalculForceAcceleration’ declared void
    fonctions.h:6: error: ‘objet’ was not declared in this scope
    fonctions.h:6: error: ‘o’ was not declared in this scope
    fonctions.h:6: error: expected primary-expression before ‘const’
    main.cpp: In function ‘int main()’:
    main.cpp:57: error: ‘CalculForceAcceleration’ was not declared in this scope
    make: *** [main.o] Erreur 1
    Les deux commandes me disent que le fichier n'existe pas (ce qui est effectivement le cas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ nm main.o | grep CalculForceAcceleration
    nm: 'main.o': No such file
    $ nm fonctions.o | grep CalculForceAcceleration
    nm: 'fonctions.o': No such file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls
    fonctions.cpp  fonctions.h  main.cpp  Makefile  objet.cpp  objet.h  Point.cpp  Point.h  Vecteur.cpp  Vecteur.h

  9. #9
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    on est revenu au point de départ avec l'erreur initiale (objet inconnu), pourquoi ? avez-vous ajouté l'include manquant (nos réponses vers 17h30) ?

    en tout cas cela montre bien que vous n'aviez pas fait l'édition de liens avec fonctions (réponse de 18h30)
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

Discussions similaires

  1. problème avec paramètres d'une requête
    Par zskiredj dans le forum Général VBA
    Réponses: 5
    Dernier message: 06/01/2011, 11h00
  2. [XL-2003] Problème avec utilisation d'une fonction dans les formules
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2009, 10h43
  3. problème de paramètres dans une fonction
    Par morgan54 dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/05/2008, 16h53
  4. Problème avec structure dans une fonction
    Par Saliman dans le forum C
    Réponses: 2
    Dernier message: 22/11/2007, 11h45
  5. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50

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