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 :

Undefined reference to vtable et bibliothèques


Sujet :

C++

  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut Undefined reference to vtable et bibliothèques
    Bonjour,

    J'ai créé une petite bibliothèque avec en particulier deux petites classes :
    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
    namespace LD
    {
        namespace BDD
        {
            class DataBase;
     
            class VirtualDataBaseFactory
            {
            public:
     
                virtual DataBase * createDataBase(const std::string & dbname, const std::string & login,
                                                  const std::string & password = "", const std::string & host="localhost") = 0;
                virtual ~VirtualDataBaseFactory(){}
            };
        }
    }

    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
    namespace LD
    {
        namespace BDD
        {
            /** @brief DataBaseFactory for postgresql */
            class PSQLDataBaseFactory : public VirtualDataBaseFactory
            {
            public:
                PSQLDataBaseFactory();
     
                DataBase * createDataBase(const std::string & dbname, const std::string & login,
                                          const std::string & password = "", const std::string & host="localhost");
                virtual ~PSQLDataBaseFactory(){}
            };
        }
    }

    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
    #include "../../includes/PostgreSQL_impl/psqldatabase.h"
    #include "../../includes/PostgreSQL_impl/psqldatabasefactory.h"
     
    namespace LD
    {
        namespace BDD
        {
            PSQLDataBaseFactory::PSQLDataBaseFactory()
            {
            }
     
            DataBase * createDataBase(const std::string & dbname, const std::string & login,
                                      const std::string & password, const std::string & host)
            {
     
                return new PSQLDataBase(dbname, login, password, host);
            }
        }
    }
    Et lorsque j'essaye de l'utiliser dans mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include "../../Library/DataBase/include/database.h"
     
    int main()
    {
        LD::BDD::PSQLDataBaseFactory b;
        cout << "Hello World!" << endl;
        return 0;
    }
    J'ai une erreur d'undefined reference to vtable for LD::BDD::PSQLDataBaseFactory dans LD::BDD::PSQLDataBaseFactory::~PSQLDataBaseFactory(), mais je ne vois pas du tout d'où elle pourrait provenir... avez-vous une idée?

  2. #2
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    Il manque la la définition d'une des fonctions virtuelles de la classe. (ça c'est ce que nous dit l'erreur)

    Dans le .cpp tu as oublié le PSQLDataBaseFactory:: devant le nom de la fonction, ce qui explique que la compilation passe parfaitement, le compilo prend ça pour une fonction libre, mais le linker lui cherche désespérément la définition de la méthode createDataBase ^^ !
    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
    DataBase * createDataBase(const std::string & dbname, const std::string & login,
                                      const std::string & password, const std::string & host)
            {
     
                return new PSQLDataBase(dbname, login, password, host);
            }
     
    =>
     
    DataBase * PSQLDataBaseFactory::createDataBase(const std::string & dbname, const std::string & login,
                                      const std::string & password, const std::string & host)
            {
     
                return new PSQLDataBase(dbname, login, password, host);
            }

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Merci beaucoup, j'étais complètement passé à côté

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/07/2009, 22h37
  2. undefined reference to `vtable for Graphique'
    Par lilly91 dans le forum Débuter
    Réponses: 11
    Dernier message: 23/06/2009, 17h41
  3. undefined reference to `vtable for
    Par zalalus dans le forum Qt
    Réponses: 13
    Dernier message: 27/05/2009, 15h27
  4. undefined reference to vtable
    Par sleigh dans le forum C++
    Réponses: 3
    Dernier message: 22/05/2007, 09h48
  5. Réponses: 17
    Dernier message: 25/10/2005, 10h09

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