Partage
  • Partager sur Facebook
  • Partager sur Twitter

surcharge d'un operator+=

Sujet résolu
    20 juin 2008 à 23:34:35

    Salut à tous,

    j'ai un exercice à faire, j'ai presque fini , la seule chose qui me bloque c'est l'operator+=,
    j'arrive pas à le définir.en fait il s'agit de définir un op+= de matrice.

    voici mon code :
    Matint& Matint::operator+= (const Matint &matrice) {
            if(ligne != m.ligne || colonne != matrice.colonne){
                     cerr << endl << "*** Index out of range ***" << endl;
                     exit(EXIT_FAILURE);
            }
            else
            {
            for(int i = 0; i < ligne; ++i)
                    for(int j = 0; j < colonne; ++j){
                            return *this[i][j] = *this[i][j] + matrice[i][j];
                    }
            }
    }
    

    le compilateur me sort ce msg quand je compile :
    no match for 'operator*' in '*((+(((unsigned int)i) * 12u)) + ((Matint*)this))->Matint::operator[](j)'

    svp si vous voyez comment résoudre le pb, n'hésitez pas :)
    merci
    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2008 à 23:44:28

      Et en enlevant le return ça fait quelque chose ou pas?
      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2008 à 23:49:21

        ça fait :s
        no match for 'operator[]' in '*((+(((unsigned int)i) * 12u)) + ((Matint*)this))[j]'
        la même chose
        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2008 à 23:52:58

          Il aurait fallu que tu entoures le *this de parenthèses.
          Mais cela ne va pas du tout être efficace. Attaques directement ton buffer interne.
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            20 juin 2008 à 23:55:48

            ahh mnt il me demande définir un autre operator
            no match for 'operator[]' in 'matrice[i]'
            mais celui-là je vois vraiment comment le faire :s

            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2008 à 0:19:47

              Il faut Définir une classe vecteur/proxy, et renvoyer ce vecteur.
              (Proxy dans le sens où il ne sera pas responsable de la mémoire qu'il voit: il se contente juste de fonctionner comme une vue vers une zone gérée ailleurs).


              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                21 juin 2008 à 10:29:51

                Je te conseille plutôt de surcharger l'opérateur() avec deux composantes x et y par exemple. Cet opérateur donnera l'accès à une "case" de la matrice. Ce sera mieux que un opérateur [].
                • Partager sur Facebook
                • Partager sur Twitter
                Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                surcharge d'un operator+=

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown