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 :

[Debutant c++] erreur de compilation de template


Sujet :

Langage C++

  1. #1
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut [Debutant c++] erreur de compilation de template
    salut a tous

    voila j'ai a realiser un programme qui gere des ensembles de n'importe quel type.

    je l'ai dabord ecris pour des enssemble d'entier puis j'ai reforter le code pour qu'il se transforme en template et depuis il compile et ne voit aucune erreur sauf celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g++.exe: ensemble.inl: linker input file unused because linking not done
    g++.exe main.o ensemble.o erreur.o  -o "Ensemble.exe" -L"C:/Dev-Cpp/lib" 
    g++.exe: ensemble.o: No such file or directory
    je comprends bien qu'il cherche ensemble.exe mais je croyais que c'etait justement le but de la compilation et de l'editionde lien

    enfin que faire comment supprimer cette derniere erreur

    WDionysos

    PS: mes fichiers sont tous dans le meme repertoires, il y a ensemble.h, ensemble.inl qui est inclus a la fin de ensemble.h et a cote erreur.h et erreur.cpp pour la gestion des erreurs.

    environement: dev-c++

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je ne sais pas comment tu as ajouté ensemble.inl à ton projet, mais il ne doit être ni compilé ni lié, seulement inclus dans le code source (comme un en-tête) -- s'il contient bien l'implémentation de ta classe template.

    Ainsi tu n'obtiendras pas de fichier ensemble.o (puisque rien n'est compilé).

  3. #3
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut
    oui a la fin de mon fichier ensemble.h (qui contient la classe ensemble et la classe element) j'ai la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "ensemble.inl"
    et ca m'enerve car pour l'instant j'ai un main totalement vide donc pas d'erreur possible et si j'essai d'y instantier un enssemble, il me dit un

    undeclare, first use this function...

    EDIT ::

    oui il localise l'erreur dans le makefile.win qui est un makefile automatiquement genere par dev c++

    pourriez vous m'indiquez la syntaxe pour une compilation manuelle lorsque j'ai un template est ce

    g++ main.cpp erreur.cpp -o ensemble.exe

    /EDIT

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    oui a la fin de mon fichier ensemble.h (qui contient la classe ensemble et la classe element) j'ai la ligne
    Oui mais es-tu sûr que Dev-C++ ne tente pas de le compiler ? On dirait bien que c'est ce qu'il fait.

  5. #5
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut
    oui peux tu lire mon edit dans le message au dessus

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il suffit de ne pas spécifier le fichier .inl dans la ligne de commande (c'est comme un en-tête, et tu ne t'amuses pas à compiler les en-têtes).

    Sinon dans Dev-C++ directement, il suffit dans les options de ton projet ou de ton fichier de dire qu'il ne doit pas être compilé.

  7. #7
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut
    ok c'etait bien ca, maintenant je vois au moin la fenetre d'execution

    merci

    mais puisje abuiser de ta generosité car je ne sais pas comment instancier mon objet dans le main

    est ce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ensemble e1    // gere par le compilateur
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ensemble e1 = new ensemble() 
    //gerer par moi j'ai inclus des destructeur qui font de delete propre
    dans les deux cas il me laisse avec un :
    14 C:\Dev-Cpp\Workspace\Ensemble\main.cpp `ensemble' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)
    une idee pour me pousser un peu par l'avant

    WD

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    S'il ne trouve pas ensemble c'est probablement que tu n'as pas inclu le fichier qui le définit ? Ou alors tes balises anti-réinclusion sont mal utilisées (ça arrive souvent avec les .inl) ?

    Et puis si ensemble est un template, il faut l'instancier avec un paramètre template non ? Du genre ensemble<int>, ou que sais-je.

Discussions similaires

  1. templates et erreur de compilation
    Par Rniamo dans le forum C++
    Réponses: 2
    Dernier message: 14/06/2008, 19h51
  2. [Debutant(e)] Erreur de compilation
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 9
    Dernier message: 27/02/2007, 09h30
  3. [debutant][C++][9]erreur à la compilation
    Par cladsam dans le forum DirectX
    Réponses: 9
    Dernier message: 03/10/2006, 12h05
  4. [Debutant GCC sur Solaris]Erreur de compilation
    Par xxaragornxx dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/01/2006, 17h29
  5. Réponses: 4
    Dernier message: 30/04/2004, 13h14

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