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 :

biblioth�que et include


Sujet :

C++

  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut biblioth�que et include
    Bonjour � tous,

    j'ai une question � laquelle je n'ai jamais trouv� de r�ponse et qui me taraude toujours. Ou bien j'ai oubli�. Ou ils sentaient pas bon. Enfin ils veulent pas :]

    Alors on est sous Windows, avec visual studio (peu importe la version).
    On a une solution avec 2 projets.
    Le premier projet est une biblioth�que statique. Cette biblioth�que utilise une bibliot�que externe, par exemple boost.
    Le deuxi�me projet est un ex�cutable qui utilise la biblioth�que du premier projet.

    Un des en-t�te de la lib du premier projet inclus un en-t�te de boost. Par exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // fichier UneClasseDeLaLib.h
     
    #ifndef UNECLASSEDELALIB_H
    #define UNECLASSEDELALIB_H
     
    #include <boost/date_time/posix_time/posix_time.hpp>
     
    class UneClasseDeLaLib
    {
    //etc.
    et dans le projet ex�cutable, quelque part on a un

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    #include "UneClasseDeLaLib.h"
    L'ex�cutable du 2eme projet n'est pas sens� connaitre boost lui. Lui en s'en fiche de boost, il n'en a pas besoin directement. Donc il ne link pas boost ni n'est configur� pour savoir o� sont les .h de boost.

    Mais �a ne marche pas. A la compilation de l'ex�cutable, le compilateur me donne une erreur disant qu'il ne trouve pas le fichier boost/date_time/posix_time/posix_time.hpp

    Comment faire pour �viter d'avoir � configurer le projet de l'ex�cutable pour boost?

  2. #2
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    Salut Rod,

    J'ai du rater quelque chose dans ta question, parce que j'ai l'impression que la r�ponse est dans la question ?

    Soit tu veux faire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    class UneClasseDeLaLib
    {
    public :
    	void m(const boost::time& ...);
    ...
    }
    et ce n'est pas possible de ne pas fournir la d�finition de time � l'utilisateur, puisqu'il en a besoin.

    Soit tu veux faire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    class UneClasseDeLaLib
    {
    private :
    	void m(const boost::time& ...);
    ...
    }
    et � ce moment-l� tu dois inclure la partie publique de tes classes dans la lib, ce qui reste (� ma connaissance) quelque chose de sp�cifique � tel ou tel compilateur.

    Un post pr�c�dent parle de ceci et Flo semble avoir mis �a en place.

    Bonne journ�e

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par d�faut
    Tu peux d�placer les includes de boost dans les fichiers d'impl�mentation de la biblioth�que et:
    - mettre des d�clarations anticip�es � la place, si les �l�ments de boost sont utilis� uniquement sous forme de pointeur, de r�f�rence ou de param�tres de fonctions,
    - ou cacher tous les �l�ments de boost derri�re un seul pointeur vers une structure opaque �galement d�clar�e de fa�on anticip�e (idiome pimpl/d-pointer/cheschire cat).

  4. #4
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    @feriaman: en fait mon probl�me est lorsque la variable est membre de la classe de la lib:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class UneClasseDeLaLib
    {
    private :
    	boost::time m_time;
    @alexisdm: effectivement, le cheshire cat... mais je trouve que c'est un peu lourd, surtout lorsque la classe en question est une petite structure, mais bon, je ne crois pas qu'il y a d'autre moyen.

    Ce type de probl�me est inh�rent au dev de biblioth�que. C'est un bon exemple qui montre que le dev de biblioth�que est tr�s diff�rent du dev d'application, m�me au niveau technique.

  5. #5
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    Citation Envoy� par r0d Voir le message
    @feriaman: en fait mon probl�me est lorsque la variable est membre de la classe de la lib:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class UneClasseDeLaLib
    {
    private :
    	boost::time m_time;
    .
    Ok. Le seul point important de mon point de vue, c'est public ou priv�.
    • public => impossible
    • priv� => il ne faut exporter que la partie publique.


    Partant de l�, on peut se demander comment faire.
    Le fait de s�parer � la main public/priv� est une solution.
    Peut-�tre que certains compilateurs permettent de n'exporter la partie priv�e en d�clarant sp�cifiquement que tu n'exporte pas ceci ou cela.

    Encore une fois, l'export de classes en C++, c'est pas au point, et certainement pas portable.

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par r0d Voir le message
    ....
    2 solutions (avec des tas de fen�tres avec presque pas de murs) :
    => Ou boost fait parti de l'interface publique de ta biblioth�que et alors boost est une d�pendance apport�e par ta biblioth�que � ton programme
    => ou boost fait parti de l'impl�mentation priv�e de ta biblioth�que, et l� : pimpl idiom pour n'avoir qu'une interface de fonctions publiques uniquement.

Discussions similaires

  1. #include, biblioth�ques et modules
    Par VivienD dans le forum D�buter
    R�ponses: 3
    Dernier message: 19/11/2012, 01h03
  2. Includes et biblioth�ques
    Par Yihaa dans le forum Qt Creator
    R�ponses: 7
    Dernier message: 14/08/2009, 16h09
  3. include de biblioth�que ITK
    Par duvi87 dans le forum VC++ .NET
    R�ponses: 0
    Dernier message: 11/12/2008, 14h24
  4. #include "math.h" et #include <math.h>
    Par pounka dans le forum C
    R�ponses: 4
    Dernier message: 01/05/2003, 21h06
  5. Biblioth�ques et documentation
    Par Anonymous dans le forum OpenGL
    R�ponses: 4
    Dernier message: 01/04/2002, 12h24

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