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 :

Probl�me de conversion const


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut Probl�me de conversion const
    [edit]sujet d�terr� : ici [/edit]

    Bonjour,

    Je d�terre un peu le sujet mais je suis tomb� dessus en faisant une recherche sur Google ^^ Auriez-vous une explication claire du pourquoi de cette erreur ? Dans mon cas, c'est � cause du 'const' qui suit l'un des param�tres de mon op�rateur <<.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename M>
    class VehiculeElectrique: public VehiculeNonHybride<M> {
    public:
    	template <typename T>
    	friend std::ostream & operator<<(std::ostream &, const VehiculeElectrique<T> &);
    };
     
    template <typename T>
    std::ostream & operator<<(std::ostream & flux, const VehiculeElectrique<T> & vehicule) {
    	flux << "Véhicule électrique (" << vehicule.getMoteur() << ")" << std::endl;
            return flux;
    }
    Merci :-)

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    Ta fonction membre getMoteur() est-elle d�clar�e avec le mot cl� const?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Non, voil� � quoi ressemble ma classe VehiculeNonHybride:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template <typename M>
    class VehiculeNonHybride: public Vehicule {
    private:
    	M moteur_;
     
    public:
    	M & getMoteur();
    };
     
    template <typename M>
    M & VehiculeNonHybride<M>::getMoteur() { return moteur_; }
    Si j'ajoute 'const' devant getMoteur(), il m'affiche une erreur.

  4. #4
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par Gaspoute Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    template <typename M>
    M const & VehiculeNonHybride<M>::getMoteur() const { return moteur_; }
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Super merci :-)

    J'ai une autre question avec l'ajout du 'const'. Pourquoi ceci m'affiche une erreur ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    template <typename M>
    void VehiculeElectrique<M>::demarrer() {
    	VehiculeElectrique<M>::getMoteur().allumer();
            std::cout << "Le véhicule démarre" << std::endl;
    }
    et pas �a
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    template <typename M>
    void VehiculeElectrique<M>::demarrer() {
    	M moteur = VehiculeElectrique<M>::getMoteur();
    	moteur.allumer();
    	std::cout << "Le véhicule démarre" << std::endl;
    }
    J'ai peut-�tre un d�but de r�ponse mais sans �tre s�r: dans le deuxi�me bout de code, on fait un cast lorsqu'on assigne le retour � la variable 'moteur'.

  6. #6
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    C'est presque �a :

    Dans le premier, tu essaye d'appeler allumer sur une r�f�rence constante au moteur contenu par ton v�hicule : Ca ne marche pas.

    Dans le deuxi�me, tu dupliques l'objet moteur contenu dans ton v�hicule pour en obtenir un nouveau (cette duplication est une op�ration constante, donc �a passe). Puis tu allumes cette copie, il n'y a pas de soucis.

    Mais si tu appelles ensuite getMoteur().estAllume(); (au fait pourquoi mettre VehiculeElectrique<M>:: devant getMoteur() ?), tu pourras voir que le moteur de ton v�hicule est toujours �teint !
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Le mieux alors serait de faire une r�f�rence � l'objet stock� par 'moteur_' ?

    Je mets 'VehiculeElectrique<M>::' pcq 'getMoteur()' d�pend d'un template. Ou est-ce une erreur ?

    Je dois avouer que les templates est un sujet complexe ^^

  8. #8
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Il te faudrait alors faire deux versions de la fonction getMoteur (enfin, si tu tiens absolument � mettre en place un tel get/setter) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    const M & getMoteur() const;
    M & getMoteur();
    Mais ce n'est pas n�cessaire.
    En effet, tu es dans la classe VehiculeElectrique<M> (consid�res �a comme une classe, �tant donn� que le fait qu'elle soit template n'a pas d'importance ici).
    Ceci a plusieurs cons�quences.
    D'abord, tu n'es pas oblig� de mettre VehiculeElectrique<M>:: devant chacun de tes appels � des m�thodes du m�me objet.
    Et surtout, tu n'es tout bonnement pas oblig� d'utiliser getMoteur() du tout !
    Tu peux utiliser moteur_ tout court.

    Ce qui t'am�ne � ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    template <typename M>
    void VehiculeElectrique<M>::demarrer() {
    	moteur_.allumer();
            std::cout << "Le véhicule démarre" << std::endl;
    }

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut
    Citation Envoy� par Equinoxe_ Voir le message
    Il te faudrait alors faire deux versions de la fonction getMoteur (enfin, si tu tiens absolument � mettre en place un tel get/setter) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    const M & getMoteur() const;
    M & getMoteur();
    Oh, bon dieu!!! non!!!

    Il ne faut jamais cr�er un accesseur non constant ou renvoyant une r�f�rence non constante !!!

    Autrement, tu perds tout contr�le sur les modifications que pourra subir ton objet, et, ca, c'est le premier pas sur un chemin qui ne peut te mener que vers un mur

    En outre, la pr�sence m�me d'un accesseur (fut il constant ) ne se justifie � priori absolument pas :

    Tout v�hicule motoris� va tr�s certainement exposer une s�rie de comportements susceptibles d'agir sur l'�tat du moteur, mais il n'y a aucune raison que l'utilisateur du dit v�hicule n'ait � connaitre le moteur pour �tre en mesure d'utiliser le v�hicule
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  10. #10
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Oh, bon dieu!!! non!!!

    Il ne faut jamais cr�er un accesseur non constant ou renvoyant une r�f�rence non constante !!!
    Tu veux dire, comme std::vector<T>::operator[] ?
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  11. #11
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    Tu veux dire, comme std::vector<T>::operator[] ?
    Ca, c'est l'exception qui confirme la r�gle, parce que vector a pour seule responsabilit� de regrouper un ensemble d'objets types identique de mani�re contig�e en m�moire

    Il n'a donc absolument pas � d�cider s'il est coh�rent ou non de permettre la modification des �l�ments qu'il contient d�j�

    Par contre, le fait de permettre d'acc�der au moteur d'un v�hicule et de pouvoir le modifier � sa guise rentre bel et bien dans le cadre de la r�gle g�n�rale qui est : cela n'a aucun sens
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Si j'ai bien compris: dans mon cas, la m�thode 'getMoteur()' n'a aucun sens et il serait alors plus judicieux d'utiliser directement l'attribut 'moteur_' de la classe 'VehiculeNonHybride' � l'int�rieur de la classe 'VehiculeElectrique' comme l'a sugg�r� Equinoxe_ pour modifier son �tat comme ici 'moteur_.allumer()' ?

    Cependant, admettons que �a soit coh�rent de faire un getter, est-ce pour y acc�der doit-on le faire comme ceci ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    VehiculeElectrique<M>::getter()
    Encore merci de votre aide

  13. #13
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Gaspoute Voir le message
    Si j'ai bien compris: dans mon cas, la m�thode 'getMoteur()' n'a aucun sens et il serait alors plus judicieux d'utiliser directement l'attribut 'moteur_' de la classe 'VehiculeNonHybride' � l'int�rieur de la classe 'VehiculeElectrique' comme l'a sugg�r� Equinoxe_ pour modifier son �tat comme ici 'moteur_.allumer()' ?
    Effectivement, la m�thode getMoteur() n'a aucun sens, et il serait judicieux d'acc�der directement � l'attribut moteur_ de la classe qui dispose de cet attribut

    Car j'ose esp�rer que tu ne fais pas d�river ta classe Vehicule hybride de VehiculeElectrique et de VehiculeNonHybride !!!

    Les invariants du v�hicule hybride (nombre de moteur(s), par exemple)ainsi que ses pr� et post conditions (�tat du (des) moteur(s) en fonction de la vitesse, par exemple) sont en effet totalement incompatible avec un tel h�ritage multiple (aussi bien du point de vue de vehiculeNonHybride que du point de vue de VehiculeElectrique)
    Cependant, admettons que �a soit coh�rent de faire un getter, est-ce pour y acc�der doit-on le faire comme ceci ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    VehiculeElectrique<M>::getter()
    Encore merci de votre aide
    Pour autant qu'un accesseur soit opportun, tu y fait appel depuis l'objet sur lequel tu souhaites utiliser l'accesseur, c'est donc plutot du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    Type obj;
    /* voir 
    Type<T> obj;
    */
    item = obj.getter();
    // OU   -   OU   -   OU
    obj.getter().doSomething();
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Car j'ose esp�rer que tu ne fais pas d�river ta classe Vehicule hybride de VehiculeElectrique et de VehiculeNonHybride !!!
    Effectivement, il y a un classe 'VehiculeHybride' dont h�ritent d'autres v�hicules

    Ca commence � devenir plus clair, merci
    Je reviendrai p-e sur l'un ou l'autre sujet en cas de probl�me ^^

  15. #15
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Salut
    Oh, bon dieu!!! non!!!

    Il ne faut jamais cr�er un accesseur non constant ou renvoyant une r�f�rence non constante !!!

    Autrement, tu perds tout contr�le sur les modifications que pourra subir ton objet, et, ca, c'est le premier pas sur un chemin qui ne peut te mener que vers un mur

    En outre, la pr�sence m�me d'un accesseur (fut il constant ) ne se justifie � priori absolument pas :

    Tout v�hicule motoris� va tr�s certainement exposer une s�rie de comportements susceptibles d'agir sur l'�tat du moteur, mais il n'y a aucune raison que l'utilisateur du dit v�hicule n'ait � connaitre le moteur pour �tre en mesure d'utiliser le v�hicule
    Je me permettrai de pr�ciser que c'est uniquement si il tient vraiment � mettre en place un tel accesseur. (cf. mon message d'au-dessus)

    Mais, en fait, le principe m�me d'un accesseur est devenu � mes yeux �trange (en tout cas, un accesseur direct), cf. http://blog.emmanueldeloget.com/inde...des-accesseurs

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    J'ai suivi vos conseils et j'ai utilis� directement l'attribut 'moteur_' de ma classe 'VehiculeNonHybride' dont h�rite 'VehiculeElectrique', cependant il m'affiche encore une erreur me signalant que cet attribut n'existe pas.

    In file included from projet.cpp:8:
    VehiculeElectrique.hpp: In member function �void VehiculeElectrique<M>::demarrer() const�:
    VehiculeElectrique.hpp:22: error: �moteur_� was not declared in this scope
    Je ne comprends pas pourquoi, pourtant j'ai bien mis l'attribut en 'protected' afin qu'il soit accessible par les classes qui h�ritent de 'VehiculeNonHybride'.

    Voici ma classe 'VehiculeElectrique':
    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
     
    #include <iostream>
    #include "VehiculeNonHybride.hpp"
     
    template <typename M>
    class VehiculeElectrique: public VehiculeNonHybride<M> {
    public:
    	template <typename T>
    	friend std::ostream & operator<<(std::ostream &, const VehiculeElectrique<T> &);
    	void demarrer() const;
    };
     
    template <typename T>
    std::ostream & operator<<(std::ostream & flux, const VehiculeElectrique<T> & vehicule) {
    	flux << "Véhicule électrique" << std::endl;
    	return flux;
    }
     
    template <typename M>
    void VehiculeElectrique<M>::demarrer() const {
    	moteur_.allumer();
    	std::cout << "Le véhicule démarre" << std::endl;
    }
    et ma classe 'VehiculeNonHybride':
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef VEHICULENONHYBRIDE_H
    #define VEHICULENONHYBRIDE_H
     
    #include "Vehicule.hpp"
     
    template <typename M>
    class VehiculeNonHybride: public Vehicule {
    protected:
    	M moteur_;
    };
     
    #endif

  17. #17
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Pas de bol, tu es tomb� sur le cas sp�cial tordu...

    La classe de base est un template, elle pourrait donc �tre sp�cialis�e, donc le compilateur n'a pas le droit de regarder dedans avant de savoir ce que vaut M.

    Maintenant, quand on a un nom dans un template, ce nom peut �tre de deux cat�gories : d�pendant ou non d�pendant d'un param�tre template. Les noms non d�pendants sont r�solus imm�diatement, les noms en d�pendant attendent l'instanciation du template pour �tre r�solus (toujours pour ces histoires de sp�cialisation).

    A priori, moteur_ ne d�pend pas de ce param�tre, donc il doit �tre r�solu imm�diatement. Par contre, quand on cherche � le r�soudre, on n'a pas le droit de regarder dans la classe de base. Du coup, on ne le trouve pas pendant cette phase.

    Solution ? Rendre le nom d�pendant.
    Le plus simple est d'utiliser this->moteur_ au lieu de moteur_

    Je ne sais pas si j'ai �t� clair, ce n'est pas facile � expliquer le pourquoi du comment...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Par d�faut
    Je pense avoir compris merci :-)

Discussions similaires

  1. R�ponses: 7
    Dernier message: 06/04/2011, 16h54
  2. Probl�me conversion const char *
    Par autoz dans le forum D�buter
    R�ponses: 5
    Dernier message: 15/10/2009, 21h19
  3. Probl�me de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    R�ponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Probl�me de conversion unicode
    Par djmalo dans le forum C
    R�ponses: 5
    Dernier message: 09/03/2004, 11h48
  5. R�ponses: 11
    Dernier message: 02/09/2003, 14h20

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