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 de linkage avec template


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Problème de linkage avec template
    Bonjour

    Comme vous avez dû le lire dans la FAQ, si on compile le code suivant avec certains compilateurs (DevCpp en tous cas), on a une erreur de l'éditeur de lien.
    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
     
    // main.cpp
    #include <cstdlib>
    #include <iostream>
     
    #include "A.h"
     
    using namespace std;
     
    int main(int argc, char *argv[]) {
      float v = 3;
      int f = 2;
      double r = A::produit( v, f );
      cout << v << " x " << f << " = " << r << endl;
      system("PAUSE");
      return EXIT_SUCCESS;
    }// main
     
    // A.h
    #if ! defined A_H
    #define A_H
     
    class A {
    public:
      template<class V, typename F>
      static V produit( V , F );
     
    };
     
    #endif
     
    // A.cpp
     
    #include "A.h"
    template<class V, typename F>
    V A::produit( V v, F f) {
      return v * f;
    }
    La solution proposée par (le brillant) Laurent Gomilla, est :
    1) soit de copier le code de A.cpp à la fin de A.h
    2) d'ajouter un include à la fin du .h (#include "A.tcp")

    Ces solutions fonctionnent très bien, mais :
    - la solution 1) me gène un peu parce tout le code est dans un seul fichier
    - la solution 2) me gène aussi parce que je n'ai pas la coloration syntaxique pour le fichier .tcp (j'utilise DevCpp) et mon éditeur ne me permet plus de basculer du fichier .h au .cpp...

    Vous auriez des idées pour éviter les inconvénients de la solution 2 ?

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    C'est juste l'extension qui empeche la coloration ? As-tu essayé avec .inl ?

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Tu n'a qu'a modifier les options de coloration de Devcpp.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    - la solution 1) me gène un peu parce tout le code est dans un seul fichier
    Et c'est grave ?
    Personnellement je dirais que ça ne sert à rien de séparer l'interface et l'implémentation des templates.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    C'est juste l'extension qui empeche la coloration ? As-tu essayé avec .inl ?
    Oui, mais j'ai trouvé que dans DevCpp, on peut utiliser la coloration syntaxique pour n'importe quelle extension. Il suffit d'aller dans "Outils / Options de l'éditeur" et d'ajouter l'extension voulue...

    Citation Envoyé par Davidbrcz
    Tu n'a qu'a modifier les options de coloration de Devcpp.
    Effectivement...

    Citation Envoyé par loufoque
    Citation Envoyé par Kaji
    - la solution 1) me gène un peu parce tout le code est dans un seul fichier
    Et c'est grave ?
    Personnellement je dirais que ça ne sert à rien de séparer l'interface et l'implémentation des templates.
    C'est utile si tu veux créer une librairie, non ?
    Dans le cas "classique" il suffira de distribuer le .h et les fichiers .lib, .a ou dll.
    Si le .h contient l'interface et le code, il faudra éventuellement enlever le code pour distribuer le .h ...

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

Discussions similaires

  1. Problème de linkage avec mysql
    Par grollum dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 13/03/2008, 21h10
  2. Problème de linkage avec g++
    Par GarulfoLinux dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 08/08/2007, 19h57
  3. Problèmes de linking avec templates
    Par oodini dans le forum C++
    Réponses: 8
    Dernier message: 19/06/2007, 15h32
  4. Problème au linkage avec mfc42d
    Par GLDavid dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 04/01/2007, 11h32
  5. Problème de linkage avec la librairie DevIl
    Par Drannor dans le forum DevIL
    Réponses: 1
    Dernier message: 18/01/2006, 23h05

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