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++Builder Discussion :

Linker error du compilateur


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Ao�t 2004
    Messages
    192
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activit� : Concepteur traitement de signal
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 192
    Par d�faut Linker error du compilateur
    Bonjour !!

    J'ai un souci avec mon petit prog ou plut�t lors de la compilation.

    En fait, j'ai donc mon projet avec une frame standard. J'ai construit une classe annexe. Cette classe, je l'ai d�clar�e dans un header � part, et j'ai cod� les fonctions associ�es (D�sol�, j'arrive plus � me souvenir des termes techniques pour �tre plus pr�cis....) dans un fichier cpp. Jusque l�, rien d'extraordinaire, je l'ai d�j� fait pour d'autres programmes, d'autres classes... Sauf que l�, �a marche pas. Mon compilateur arrive � linker vers la d�claration des fonctions, mais pas vers leur code on dirait. Pourtant le fichier cpp o� elles sont cod�es fait partie de mon projet, mais non. La mani�re non �l�gante que j'ai trouv� pour pallier � �a, c'est de coder les fonctions en "inline" dans le header. Sauf que vous serez d'accord avec moi, c'est vraiment pas �l�gant.

    Est-ce qu'il y a qqch que je fais pas correctement ?? Merci pour votre aide !

    Juste pour pr�ciser, les fonctions sont d�clar�es en public �videmment....

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Salut,
    tels que tu me d�crit le probl�me, je pense que tu as oubli� dans ton fichier .cpp de sp�cifier le nom de la classe devant la fonction, comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void MaClasse::MaFonction(voir)
    Mais je ne peut en �tre sur sans du code et le message d'erreur pr�cis du linker, n'h�site pas � poster du code, m�me avec les nom variables et de fonction modifier si ce code est sensible

  3. #3
    Membre confirm�
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Ao�t 2004
    Messages
    192
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activit� : Concepteur traitement de signal
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 192
    Par d�faut
    Salut !

    Non non, y'a rien de "sensible" dans mon code t'inqui�te ! C'est tout simplement une des nombreuses classes perso de matrices. J'ai besoin de �a pour me simplifier la vie pour le calcul des matrices de Cholesky dans une m�thode de Monte Carlo.

    Voici les codes :

    Header
    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
    72
    73
    74
    75
    76
    77
    78
    #ifndef _MATRIX_
    #define _MATRIX_
     
    #include <vector>
    #include <cassert>
    #include <iostream>
     
    template <class T> class matrix{
        protected:
            std::vector<std::vector<T> > data;
            std::size_t NBLignes;
            std::size_t NBColonnes;
        public:
            //Constructeur par defaut
            matrix(){}
     
            //Alloue en memoire une matrice
            //param nb_lig Nombre de ligne
            //param nb_col Nombre de colonne
            matrix(std::size_t nb_lig,std::size_t nb_col){
                NBLignes = nb_lig;
                NBColonnes = nb_col;
                for(std::size_t lig=0;lig<nb_lig;++lig){
                    std::vector<T> tmp(nb_col,T());
                    data.push_back(tmp);
                }
            }
     
            //brief Destructeur
            ~matrix(){}
     
            //return Le nombre de ligne
            inline std::size_t nbLignes() const{
                return data.size();
            }
     
            //return Le nombre de colonne
            inline std::size_t nbCols() const{
                if (data.size()==0) return 0;
                return data[0].size();
            }
     
            //Accesseur vers un element de la matrice
            //param lig son numero de ligne
            //param col son numero de colonne
            //return la valeur stockee
            inline T get(std::size_t lig,std::size_t col) const{
                assert(lig<NBLignes);
                assert(col<NBColonnes);
                return data[lig][col];
            }
     
            //brief Accesseur vers un element de la matrice
            //param lig son numero de ligne
            //param col son numero de colonne
            //param val la valeur a stocker
            inline void set(std::size_t lig,std::size_t col,T val){
                assert(lig<NBLignes);
                assert(col<NBColonnes);
                data[lig][col]=val;
            }
     
           inline matrix<T> cholesky(){
               int i,j,k;
               double sum;
               matrix<T> CholMat(NBLignes,NBLignes);
               for (i=0;i<NBLignes;i++) {
                 for (j=i;j<NBLignes;j++) {
                   for (sum=data[i][j],k=i-1;k>=0;k--) sum -= CholMat.get(i,k)*CholMat.get(j,k);
                    if (i == j)
                      CholMat.set(i,i,sqrt(sum));
                    else CholMat.set(j,i,sum/CholMat.get(i,i));
                 }
               }
               return CholMat;
             };
    };
    #endif
    le .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
    #include "ClasseMatrice.h"
     
    //Factorisation de Cholesky
    template <class T>
    matrix<T> matrix<T>::cholesky(){
       int i,j,k;
       double sum;
     
       matrix<T> CholMat(NBLignes,NBLignes);
     
       for (i=0;i<NBLignes;i++) {
         for (j=i;j<NBLignes;j++) {
           for (sum=data[i][j],k=i-1;k>=0;k--) sum -= data[i][k]*data[j][k];
           if (i == j)
             CholMat.set(i,i,sqrt(sum));
           else CholMat.set(j,i,sum/CholMat.get(i,i));
         }
       }
     
       return CholMat;
    }
    et dans le .cpp principal :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    #include "ClasseMatrice.h"
    //....
    matrix<double> CholAv(3,3);
    CholAp=CholAv.cholesky();
    ce qui me donne � la compilation :

    [Linker Error] Unresolved external 'matrix<double>::cholesky()' referenced from C:\USERS\blablablabla\OPTIONPRICING.OBJ

  4. #4
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello,

    Mets le code de ta fonction choleski dans ton .h...

  5. #5
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Dans le cpp, tu ne doit pas mettre le <T> dans le nom de la classe (en rouge dans le code) :
    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
    #include "ClasseMatrice.h"
    
    //Factorisation de Cholesky
    template <class T>
    matrix<T> matrix::cholesky(){
       int i,j,k;
       double sum;
    
       matrix<T> CholMat(NBLignes,NBLignes);
    
       for (i=0;i<NBLignes;i++) {
         for (j=i;j<NBLignes;j++) {
           for (sum=data[i][j],k=i-1;k>=0;k--) sum -= data[i][k]*data[j][k];
           if (i == j)
             CholMat.set(i,i,sqrt(sum));
           else CholMat.set(j,i,sum/CholMat.get(i,i));
         }
       }
    
       return CholMat;
    }

  6. #6
    Membre confirm�
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Ao�t 2004
    Messages
    192
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activit� : Concepteur traitement de signal
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 192
    Par d�faut
    J'ai d�j� essay� de ne pas lui mettre le <T> dans le nom de la classe, mais il me retourne une autre erreur comme quoi faut que je pr�cise de quelle classe je parle :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [C++ Error] ClasseMatrice.cpp(55): E2102 Cannot use template 'matrix<T>' without specifying specialization parameters
    Et pour r�pondre � totoche76, c'est justement �a que je veux �viter, de mettre le code de la fonction dans le .h

  7. #7
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Ah, mais oui, le probl�me c'est que tu fait une classe Template, je viens de me souvenir que les m�thode template doivent imp�rativement �tre d�velopp� inline, ceci explique cela

    Donc il n'y as pas trop de solution (cf la FAQ Cpp)

  8. #8
    Membre confirm�
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Ao�t 2004
    Messages
    192
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activit� : Concepteur traitement de signal
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 192
    Par d�faut
    Ok merci beaucoup !!! Tout �tait une fois encore dans la FAQ, encore fallait-il le trouver ....

    Bon et bien tant pis, je trouvais �a plus �l�gant de d�clarer et d'impl�menter dans des fichiers diff�rents, peut-�tre que je vais suivre la d�marche proposer.

    Merci encore !

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

Discussions similaires

  1. [Qt4] Linker error (vtable)
    Par titus55 dans le forum Qt
    R�ponses: 7
    Dernier message: 23/05/2007, 10h04
  2. [Linker error] undefined reference to 'IcmpSendEcho@'
    Par Xevious dans le forum Autres �diteurs
    R�ponses: 7
    Dernier message: 29/12/2005, 16h45
  3. [Linker error] DLL -> undefined reference to `vtable ?
    Par Zenol dans le forum D�buter
    R�ponses: 17
    Dernier message: 25/10/2005, 10h09
  4. Linker error :^/
    Par Ekinoks dans le forum OpenGL
    R�ponses: 15
    Dernier message: 05/09/2004, 14h18
  5. [Kylix] probleme (LINKER ERROR)
    Par subzero82 dans le forum EDI
    R�ponses: 2
    Dernier message: 14/05/2004, 19h28

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