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 :

utilisation d'une surcharge de l'opérateur* et passage par référence


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Par défaut utilisation d'une surcharge de l'opérateur* et passage par référence
    Bonjour à tous,

    Je reviens solliciter vos lumières car j'ai une petite question (j'apprends sur le tas et parfois, les livres et les forums ne suffisent pas...).

    Pour décrire mon problème :
    J'ai une classe (appelons là c1) qui contient une méthode qui prend des arguments par référence.
    J'ai une seconde classe (appelons là c2) qui contient une surcharge de l'opérateur * (pour me permettre de faire une produit matrice*vecteur)

    Je passe donc une instance de c2 à la méthode de c1 par référence. Dans cette méthode de c1 j'appelle l'opérateur * (surcharge dans c2) mais je me fait jeter par le compilateur qui me sort "no match operator * in..."
    Je sais que c'est un peut tordu et que j'oublie certainement quelque chose d'important mais je n'arrive pas à savoir ce que c'est.

    j'ai donc quelque chose qui ressemble à celà pour ma méthode de c1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void c1::setMatrix(c2& aC2)
    {
    <div style="margin-left:40px">vector<double> testVector;
    //... je remplie ce vecteur
     
    vector<double> bufferVector = aC2*testVector; //ceci me sort une erreur lors de la compilation
    vector<double> bufferVector2 = c2(aC2)*testVector; //ceci fonctionne mais ce n'est pas ce que je veux faire</div>
    }
    à savoir que la surcharge fonctionne très bien lorsque je l'utilise directement sur l'instance de ma classe (comme mis en commentaire au dessus)

    voici ce à quoi ressemble mon overload de * dans c2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vector<double> operator*(const vector<double>& aVector)
    {
    <div style="margin-left:40px">vector<double> toBeReturned;
    //... je fais mon mic-mac
    return toBeReturned;</div>
    }
    Je ne sais pas si tout ceci est bien clair, mais je suis preneur d'explications et d'une solution pour pouvoir utiliser mon passage par référence et ma surcharge.

    Merci d'avance,

    betaplus

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Salut,

    essaye de passer ta méthode const, peut-être que c'est juste ça qui bloque la première version.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par betaplus Voir le message
    compilateur qui me sort "no match operator * in..."
    ça aiderait de donner le message complet, vu qu'il donne des informations sur la recherche de la fonction à appeler, donc sur la raison pour laquelle il ne trouve pas...

  4. #4
    Membre actif
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Par défaut
    J'ai essayé sur une autre machine et voici l'erreur du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: invalid operands to binary expression ('const C2', and 'C1')
    J'ai ensuite essayé de passé la méthode en const et là ça a marché (il me semblait avoir pourtant déjà essayé). Bref pour le moment ça semble fonctionner, j'en saurai plus lundi pour voir si ça fonctionne sur la première machine.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Ton erreur est pourtant claire..
    Tu as un const& C2 et ta méthode n'est pas const.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre actif
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Par défaut
    Oui Bousk, c'est ce que j'ai compris hier... Tout marche maintenant.

    Merci à tous !

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Accessoirement, de toutes façons c'est mieux de déclarer const les méthodes qui ne modifient pas l'état de l'instance:
    1) ça permet de détecter des bugs (une méthode qui n'est pas censée modifier l'instance mais qui la modifie quand même peut donner des effets de bord tordus...)
    2) ça permet des optimisations

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/02/2015, 16h24
  2. Réponses: 4
    Dernier message: 13/11/2011, 03h18
  3. Souci avec une surcharge polymorphe d'opérateur
    Par kzwix dans le forum Langage
    Réponses: 7
    Dernier message: 03/01/2011, 21h31
  4. Réponses: 2
    Dernier message: 03/10/2007, 14h59
  5. Réponses: 6
    Dernier message: 12/07/2006, 15h34

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