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

QxOrm Discussion :

QxOrm et namespace


Sujet :

QxOrm

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut QxOrm et namespace
    Bonjour, je suis en train d'essayer d'utiliser QxOrm, mais je me heurte à un petit problème qui semble provenir de mes namespaces:

    Grosso modo, mon code est le suivant:

    User.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
     
    #include "User.hpp"
    #include "precompiled.hpp"
     
    #include <QxMemLeak.h>     // Automatic memory leak detection
     
    // This macro is necessary to register 'User' class in QxOrm context
    QX_REGISTER_CPP_QX_MANGOO( mangoo::db::User )
     
    namespace qx {
     
    template <> void register_class( QxClass<User> & t )
    {
        t.id( &mangoo::db::User::id, "id" );                    // Register 'User::id' <=> primary key in your database
        t.data( &mangoo::db::User::name, "name" );              // Register 'User::name' property with key 'name' and version '1'
        t.data( &mangoo::db::User::firstName, "firstName" );    // Register 'User::firstName' property with key 'firstName'
    }
     
    }
    User.hpp:
    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
     
    #ifndef _MANGOO_DB_USER_HPP_
    #define	_MANGOO_DB_USER_HPP_
     
    #include "precompiled.hpp"
     
    #include <tango-core/config/global.hpp>
     
    #include <QtCore/QtCore>
     
    namespace mangoo
    {
    namespace db
    {
     
    class User
    {
    public:
       long id;
       QString name;
       QString firstName;
     
       User() {}
       virtual ~User() {}
    private:
     
    };
     
    }
    }
     
     
    QX_REGISTER_HPP_QX_MANGOO( mangoo::db::User, qx::trait::no_base_class_defined, 1 )
     
    #endif
    ET à la compilation, j'ai cette erreur:
    error: 'G_QX_REGISTER_FACTORY_mangoo' has not been declared
    etc......

    Une idée ?

    Merci !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut


    Tu peux sans problème déclarer tes classes dans un namespace : mais dans ce cas, tu dois utiliser une autre macro avec un paramètre supplémentaire.
    Il y a une Q&R dans la FAQ pour répondre à ta problématique :
    http://qt.developpez.com/faq/?page=b...xorm-namespace

    Il y a un exemple d'utilisation dans le dossier ./test/qxDllSample/dll1/ de la distribution de QxOrm avec la classe CPerson définie dans l'espace de nom qx::test.

    Une chose à faire attention si tu utilises des namespace : si côté base de données, ta table se nomme "User" (ou autre chose), pense à ajouter ce code dans la fonction de mapping "void qx::register_class<T>()" (car par défaut, le nom de ta classe contient le namespace dans lequel elle appartient) :
    EDIT: Une autre remarque avec ton code qui n'a rien à voir avec les namespace => tu n'utilises pas correctement la notion de precompiled header (et c'est très important avec QxOrm). Un precompiled header permet de réduire les temps de compilation d'un projet, en général on inclut des fichiers provenant des bibliothèques utilisées dans un projet (boost, Qt, QxOrm, etc.).
    Voici 3 règles à respecter pour utiliser correctement la notion de precompiled header :
    1- dans ton fichier PRO de ton projet, tu dois avoir une ligne comme ceci : PRECOMPILED_HEADER = ./include/precompiled.h ;
    2- ne jamais inclure un precompiled header dans un fichier HPP ;
    3- #include "precompiled.hpp" doit être la 1ère inclusion dans un fichier CPP.

    Ce qui donnerait avec ton code dans le fichier User.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "precompiled.hpp"
    #include "User.hpp"
    #include <QxMemLeak.h>
    Et dans ton fichier User.hpp => tu supprimes la ligne #include "precompiled.hpp"
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Super merci ! (désolé pour le retard, je n'avais pas activé la fonction avertissement email).

    Concernant le precompiled.hpp, le problème, c'est que j'utilise scons, je ne sais pas trop ce qu'il faut que je fasse... C'est un define le PRECOMPILED_HEADER = ... ?

    En tous cas, merci pour ces infos !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Mmmh... Depuis que je suis passé au namespace, j'ai un soucis:

    Quand j'appelle ceci:
    daoError = qx::dao::create_table<User>();
    j'ai:

    [QxOrm] execute sql query failed : CREATE TABLE mangoo.db.User (user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, login TEXT, password TEXT, name TEXT, firstName TEXT)
    Unable to execute statement
    near ".": syntax error


    On dirait que ça a rajouté des . à la place des ::


    Note: j'utilise sqlite (2 je pense, celui fourni de base avec Qt).

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    On dirait que ça a rajouté des . à la place des ::
    Si tu utilises des namespace, le nom de ta classe a changé : ce n'est plus User mais <namespace> + User.
    Regarde ma 1ère réponse, je t'ai donné la solution :
    Une chose à faire attention si tu utilises des namespace : si côté base de données, ta table se nomme "User" (ou autre chose), pense à ajouter ce code dans la fonction de mapping "void qx::register_class<T>()" (car par défaut, le nom de ta classe contient le namespace dans lequel elle appartient) :
    Concernant le precompiled.hpp, le problème, c'est que j'utilise scons, je ne sais pas trop ce qu'il faut que je fasse... C'est un define le PRECOMPILED_HEADER = ... ?
    Je ne connais pas scons, mais dans ton fichier PRO (ou PRI), il faut que tu es une ligne PRECOMPILED_HEADER = ... (à rajouter à la main si scons ne le gère pas automatiquement) => c'est nécessaire pour réduire considérablement les temps de compilation d'un projet.

    Quand j'appelle ceci:
    daoError = qx::dao::create_table<User>();
    Je ne te conseille pas d'utiliser la fonction qx::dao::create_table().
    Regarde plutôt ceci pour générer ton schéma SQL :
    http://www.qxorm.com/qxorm_fr/faq.html#faq_230
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Ok, merci beaucoup !

    Je risque de pas mal te soliciter ce mois-ci, j'ai un gros projet à finir... Mais je pense que ce sera profitable pour la librairie !

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Ok pas de problème.
    Pense juste à créer un nouveau sujet dans le forum pour chaque problématique que tu peux avoir...
    @+
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

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

Discussions similaires

  1. parser un XHTML bien formé (problème namespace)
    Par luta dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2004, 12h55
  2. [Debutant][Divers] - namespace et attributs
    Par sebbb dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 14h40
  3. Erreur récurrente (namespace)
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 3
    Dernier message: 25/02/2003, 10h27

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