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 :

Class dans une Class


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut Class dans une Class
    j essaie de me familiariser avec cette structure. Voici quelques lignes de code tres simples qui, malheureusement se soldent par le message:

    error C2661: 'Vector<double>::Vector<double>' : no overloaded function takes 2 parameters
    Error executing cl.exe.


    Voici le code:


    template <class T>
    class Vector {
    public:


    template<class U,class T>

    class SVector:public Vector<T>
    {
    public:
    SVector(const size_t NRows_, const T& aScal){}
    ~SVector(){}
    };

    template<class U>
    Vector(const size_t NRows_, const T& aScal)
    {
    Vector<T>::SVector<U,T>* aVector;
    aVector=new SVector<U,T>(NRows_, aScal);
    }


    ~Vector(){}
    };


    Et le main


    void main()
    {
    Vector<double> aVector(2,1.5);
    }

    Voila si quelqu un peut m 'aider ca serait super sympa

  2. #2
    Membre extr�mement actif

    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par d�faut
    la class vector ne poss�de pas de constructeur a deux arguments svector oui

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par d�faut
    le probleme de vient pas de ta 'sous classe' mais de ton constructeur template ... il n'est apparement pas pris en compte.

    class SVector:public Vector<T>

    => n'oublie pas qu'un Vector va �tre construit pour tout SVector construit ... fait attention a ne pas tourner en rond

    int main pas void main

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    template<class U,class T> 
     
    class SVector:public Vector<T>
    {
    => s�mantiquement, T est d�j� d�fini, donc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    template<class U> 
     
    class SVector:public Vector<T>
    {
    pourquoi ne d�finit tu pas qq chose comme ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <typename U, typename T>
    class Vector
    {
    public:
      class SVector : public Vector<U, T>
      {
        ...
      };
      ...
    };

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par d�faut
    hegros => Vector(const size_t NRows_, const T& aScal)
    reveille toi :p

  5. #5
    Membre extr�mement actif

    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par d�faut
    hegros => Vector(const size_t NRows_, const T& aScal)

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    Merci BlackGoddess pour ta reponse mais je cherche veritablement a ne pas changer le type de Vector. Je ne souhaite pas qu il depende de 2 templates.

    J ai tente de ne declarer que class U pour la definition de SVector. Mais c est pire car :Vector<T> n a plus de sens. je ne crois pas qu il y ait redondance.

    Le but de la class SVector a pour but de me permettre de definir le produit d un Vector de type T avec un Scalaire de type U.
    Tout le reste de la class Vector n a besoin que de type T













    Citation Envoy� par BlackGoddess
    le probleme de vient pas de ta 'sous classe' mais de ton constructeur template ... il n'est apparement pas pris en compte.

    class SVector:public Vector<T>

    => n'oublie pas qu'un Vector va �tre construit pour tout SVector construit ... fait attention a ne pas tourner en rond

    int main pas void main

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    template<class U,class T> 
     
    class SVector:public Vector<T>
    {
    => s�mantiquement, T est d�j� d�fini, donc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    template<class U> 
     
    class SVector:public Vector<T>
    {
    pourquoi ne d�finit tu pas qq chose comme ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <typename U, typename T>
    class Vector
    {
    public:
      class SVector : public Vector<U, T>
      {
        ...
      };
      ...
    };

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    Vector<T>::SVector<U,T>* aVector; 
    aVector=new SVector<U,T>(NRows_, aScal);
    tu ne compte pas porter de type SVector<> dans ton Vector ?

    si c'est le cas, tu devras bien avoir une propri�t� SVector<U, V>* var;
    donc ton Vector devra avoir un param�tre template U pour pouvoir porter le type...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    En effet ce que je veux faire c est Scal (U)* Vecteur (T)

    et que donc
    { int a=2;
    Vector<double> aVector(2,3.25);
    Vector<int> bVector;
    bVector=a*aVector
    }



    ce que je veux faire c est une methode subtile pour ne pas avoir a definir
    template< class U, class V> pour la class Vector.




    Citation Envoy� par BlackGoddess
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    Vector<T>::SVector<U,T>* aVector; 
    aVector=new SVector<U,T>(NRows_, aScal);
    tu ne compte pas porter de type SVector<> dans ton Vector ?

    si c'est le cas, tu devras bien avoir une propri�t� SVector<U, V>* var;
    donc ton Vector devra avoir un param�tre template U pour pouvoir porter le type...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par d�faut
    d'apres ce que j'ai compris ce dont je suis pas sur ...)
    ce sont tes operateurs qui doivent alors etre template, pas un eventuel contenu ?

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    oui exact
    mais plus que ca je cherche a rendre executable une synthaxe que j ai vu dans QANTLIB. Le but la c est que le constructor de vector soit accessible.



    Citation Envoy� par BlackGoddess
    d'apres ce que j'ai compris ce dont je suis pas sur ...)
    ce sont tes operateurs qui doivent alors etre template, pas un eventuel contenu ?

  11. #11
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    template<class U>
    Vector(const size_t NRows_, const T& aScal)
    {
    Vector<T>::SVector<U,T>* aVector;
    aVector=new SVector<U,T>(NRows_, aScal);
    }
    Je ne comprend pas cette partie du code :

    1- c'est un membre template de classe template, mais le parametre U n'est pas utilis� dans les arguments de la ligne de commande
    2- Pour chaque Vector construit ou construit un SVector qui herite de Vector ?
    est-ce bien raisonnable ? quel constructeur de Vector penses-tu utiliser ?
    n'en faudrait-il pas un sans arguments ?


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    template<class U,class T> 
    class SVector:public Vector<T>
    {
    public:
    SVector(const size_t NRows_, const T& aScal){}
    ~SVector(){}
    };
    pourquoi repeter le T ici ?
    soit c'est toujours le meme que celaui de la classe imbriquante et alors il est inutile, soit s'en est un autre et alors il cache le precedent... et le nom est mal choisi et trompeur...

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    Gandalf =>Cette structure est bien volonatire
    je ne veux pas avoir recours a un heritage simple et declarer Vector de U et T.

    Le but du jeu est de faire compiler en gardant le format class de class
    je sais que je ne sus pas loin car j ai deja vu uns structure similaire.


    Pour Simplifier, je cherche a ce que

    template <class T>
    class Vector {

    public:

    template<class U, class T>
    class SVector:public Vector<T>{
    public:
    SVector(const size_t NRows_, const T& aScal){}
    ~SVector(){}
    };

    template<class U>
    Vector(const size_t NRows_, const T& aScal){}

    };

    compile ce qui ne st pas le cas
    Je repete je veux garder cette structure





    Citation Envoy� par Gandalf
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    template<class U>
    Vector(const size_t NRows_, const T& aScal)
    {
    Vector<T>::SVector<U,T>* aVector;
    aVector=new SVector<U,T>(NRows_, aScal);
    }
    Je ne comprend pas cette partie du code :

    1- c'est un membre template de classe template, mais le parametre U n'est pas utilis� dans les arguments de la ligne de commande
    2- Pour chaque Vector construit ou construit un SVector qui herite de Vector ?
    est-ce bien raisonnable ? quel constructeur de Vector penses-tu utiliser ?
    n'en faudrait-il pas un sans arguments ?


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    template<class U,class T> 
    class SVector:public Vector<T>
    {
    public:
    SVector(const size_t NRows_, const T& aScal){}
    ~SVector(){}
    };
    pourquoi repeter le T ici ?
    soit c'est toujours le meme que celaui de la classe imbriquante et alors il est inutile, soit s'en est un autre et alors il cache le precedent... et le nom est mal choisi et trompeur...

  13. #13
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    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
    #include <stdio.h>
     
    template <class T>
    class Vector {
    public:
     
    template<class U,class T>
     
    class SVector:public Vector<T>
    {
    public:
    SVector(const size_t NRows_, const T& aScal)
    {}
    ~SVector(){}
    };
     
    Vector()
    {}
     
    template<class U>
    Vector(const size_t NRows_, const T& aScal,U toto)
    {
    Vector<T>::SVector<U,T>* aVector;
    aVector=new SVector<U,T>(NRows_, aScal);
    }
     
    ~Vector(){}
    };
     
     
     
    int main()
    {
    Vector<double> aVector( 2, 1.5, 5.0);
    }
    Voila une version qui compile sur ma plateforme...

    les modifications :
    1- Le constructeur template de Vector prend un argument suppl�mentaire pour indiquer quel constructeur utiliser (resoudre U - sinon le compilo n'a pas l'id�e d'utiliser un constructeur template... en effet le <double> apr�s vector se rapporte � T et non � U...


    2- Ajout d'un constructeur sans arguement � Vector, en effect comme il y a un constructeur avec argument, le constructeur sans arguments par defaut est 'cach�' or c'est celui qu'utilise SVector puisqu'aucun autre n'est indiqu�...

  14. #14
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Citation Envoy� par Math75
    Gandalf =>Cette structure est bien volonatire
    je ne veux pas avoir recours a un heritage simple et declarer Vector de U et T.

    Le but du jeu est de faire compiler en gardant le format class de class
    je sais que je ne sus pas loin car j ai deja vu uns structure similaire.


    Pour Simplifier, je cherche a ce que

    template <class T>
    class Vector {

    public:

    template<class U, class T>
    class SVector:public Vector<T>{
    public:
    SVector(const size_t NRows_, const T& aScal){}
    ~SVector(){}
    };

    template<class U>
    Vector(const size_t NRows_, const T& aScal){}

    };

    compile ce qui ne st pas le cas
    Je repete je veux garder cette structure
    Je ne remets pas en cause ta structure, mais au contraire les manques de ton code...

    regarde ma r�ponse precedente...

    ... et change le T de SVector : il ne peut t'apporter que des ennuis (appelle le V par exemple)

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    On y est presque et merci pour cette reponse deja tres satisfaisante
    En effet ca compile.
    Mais je cherche a rendre intuitif l utilisation de Vector

    en fait, tout cet artifice a pour but de permettre:

    Vector<T> operator * (const U & aScal);

    dans la classe Vector<T>

    n y a t il pas d autre moyen que de rajoute U toto?
    NB j avais mis le constructeur vide.




    Citation Envoy� par Gandalf
    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
    #include <stdio.h>
     
    template <class T>
    class Vector {
    public:
     
    template<class U,class T>
     
    class SVector:public Vector<T>
    {
    public:
    SVector(const size_t NRows_, const T& aScal)
    {}
    ~SVector(){}
    };
     
    Vector()
    {}
     
    template<class U>
    Vector(const size_t NRows_, const T& aScal,U toto)
    {
    Vector<T>::SVector<U,T>* aVector;
    aVector=new SVector<U,T>(NRows_, aScal);
    }
     
    ~Vector(){}
    };
     
     
     
    int main()
    {
    Vector<double> aVector( 2, 1.5, 5.0);
    }
    Voila une version qui compile sur ma plateforme...

    les modifications :
    1- Le constructeur template de Vector prend un argument suppl�mentaire pour indiquer quel constructeur utiliser (resoudre U - sinon le compilo n'a pas l'id�e d'utiliser un constructeur template... en effet le <double> apr�s vector se rapporte � T et non � U...


    2- Ajout d'un constructeur sans arguement � Vector, en effect comme il y a un constructeur avec argument, le constructeur sans arguments par defaut est 'cach�' or c'est celui qu'utilise SVector puisqu'aucun autre n'est indiqu�...

  16. #16
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Citation Envoy� par Math75
    On y est presque et merci pour cette reponse deja tres satisfaisante
    En effet ca compile.
    Mais je cherche a rendre intuitif l utilisation de Vector

    en fait, tout cet artifice a pour but de permettre:

    Vector<T> operator * (const U & aScal);

    dans la classe Vector<T>

    n y a t il pas d autre moyen que de rajoute U toto?
    NB j avais mis le constructeur vide.
    De toute maniere il faut bien que ce U soit resolu, non ?
    or je ne connais que deux maniere de le resoudre, soit un des arguments de la fonction est de type U (ce que j'ai fait) soit on ajoute <> avec le type en question, mais cette forme ne semble pas marcher avec les constructeurs... peut-etre cela marche-t-il avec les methodes ?

    Ce que tu fais ne marche � mon avis pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Vector<T>	operator	*  (const U & aScal);
    Le U ici sera il le meme que pour le constructeur ?
    Ici le probl�me ne se pose pas de la meme maniere que pour le constructeur puisque un des arguments est bien de type U...

    Pense bien au cas du T de SVector... ne l'oublie pas, car il reste un piege dangereux...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par d�faut
    je ne comprends toujours pas pourquoi tu veux garder des param�tres templates durant toute la vie de ton objet alors qu'ils ne serviront qu'aux op�rateurs ... pourquoie ne pas mettre de param�tre template U qu'a tes op�rateurs ?

  18. #18
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    en fait, tout cet artifice a pour but de permettre:
    Vector<T> operator * (const U & aScal);
    J'ai d� louper un truc mais je pose quand m�me la question : pourquoi est-ce que ceci ne suffirait pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    template <class T, class U>
    Vector<T> operator *(const Vector<T>& v, const U& u);

    EDIT : ouf on dirait que je suis pas le seul � avoir loup� un truc

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    BlackGoddess=>concetement ca donnerai quoi

    Citation Envoy� par BlackGoddess
    je ne comprends toujours pas pourquoi tu veux garder des param�tres templates durant toute la vie de ton objet alors qu'ils ne serviront qu'aux op�rateurs ... pourquoie ne pas mettre de param�tre template U qu'a tes op�rateurs ?

  20. #20
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    85
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 85
    Par d�faut
    public:

    ....

    template<class U, class T>
    class SVector:public Vector<T>{
    public:
    SVector(const size_t NRows_, const T& aScal){
    NRows=NRows_;
    Values = new T[NRows];
    (size_t i=0;i<NRows;i++) (*this)(i) = aScal;
    Vector<T> operator * (const U & aScal);
    }
    ~SVector(){}
    };
    ...

    Vector<T> operator * (const U & aScal);

    pose probleme. Je dois avouer tres humblement que ca ne compile pas
    Tu declarerais comment alors?



    Citation Envoy� par Gandalf
    Citation Envoy� par Math75
    On y est presque et merci pour cette reponse deja tres satisfaisante
    En effet ca compile.
    Mais je cherche a rendre intuitif l utilisation de Vector

    en fait, tout cet artifice a pour but de permettre:

    Vector<T> operator * (const U & aScal);

    dans la classe Vector<T>

    n y a t il pas d autre moyen que de rajoute U toto?
    NB j avais mis le constructeur vide.
    De toute maniere il faut bien que ce U soit resolu, non ?
    or je ne connais que deux maniere de le resoudre, soit un des arguments de la fonction est de type U (ce que j'ai fait) soit on ajoute <> avec le type en question, mais cette forme ne semble pas marcher avec les constructeurs... peut-etre cela marche-t-il avec les methodes ?

    Ce que tu fais ne marche � mon avis pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Vector<T>	operator	*  (const U & aScal);
    Le U ici sera il le meme que pour le constructeur ?
    Ici le probl�me ne se pose pas de la meme maniere que pour le constructeur puisque un des arguments est bien de type U...

    Pense bien au cas du T de SVector... ne l'oublie pas, car il reste un piege dangereux...

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. R�ponses: 4
    Dernier message: 28/10/2008, 09h43
  2. Cr�er une classe dans une classe
    Par FabaCoeur dans le forum C++
    R�ponses: 9
    Dernier message: 02/06/2007, 20h26
  3. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    R�ponses: 2
    Dernier message: 18/05/2006, 22h02
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    R�ponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et ant�rieur
    R�ponses: 7
    Dernier message: 30/09/2005, 19h36

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