Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharge opérateur =

Pour une structure

Sujet résolu
    13 juin 2008 à 2:09:40

    Bonsoir,

    J'ai une structure toute simple :
    struct Case {
    	int x;
    	int y;
    };
    


    Je souhaite surcharger l'opérateur "=" pour cette structure.
    J'ai essayer en mettant dans le .h qui contient la structure ceci :
    Case& operator = (const Case& c);
    


    La compilation me renvoie :
    - Case.h|13|error: `Case& operator=(const Case&)' must be a nonstatic member function|
    - Case.h|13|error: `Case& operator=(const Case&)' must take exactly two arguments|

    Je ne vois pas comment faire, je pensais que ça marchait comme pour les classes, mais il semblerait que se soit différent ou alors je m'y prends mal.

    Merci d'avance pour celui (ou celle) qui pourra m'aider!
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2008 à 2:22:34

      si tu mets cette fonction en dehors de ta structure, il lui faut 2 paramètres, le premier celui qui reçoit et le 2ème celui qui dont on prend la valeur (et la valeur de retour sert pour faire : c = d = e; )
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2008 à 2:34:04

        Donc mettre quelque chose dans ce genre la plutôt :

        Case& operator = (Case A, Case B);
        


        J'ai par contre toujours la première erreur :
        - Case.h|13|error: `Case& operator=(const Case&)' must be a nonstatic member function|



        EDIT :
        Ce que t'as dit m'a fait réfléchir : "si tu mets cette fonction en dehors de ta structure"
        J'ai donc essayer de mettre ma surcharge dans la structure, et ça marche en effet exactement pareil que pour une classe.

        Maintenant je me pose la question, vaut-il mieux mettre la surcharge dans la structure, ou en dehors?
        Et si la deuxième solution la meilleure, quelle est mon problème ^^?
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 2:37:26

          La surcharge est inutile dans ce cas précis puisque tu n'emploie pas d'allocation dynamique de mémoire.

          En passant, en C++, un struct, c'est la même chose qu'une classe, sauf que tout y est public par défaut...
          • Partager sur Facebook
          • Partager sur Twitter
            13 juin 2008 à 2:42:10

            Ha oui, je viens d'essayer, et en effet A = B avec A et B de type "Case", marche sans surcharge ^^.
            Merci pour tes réponses en tout cas.
            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2008 à 9:28:53

              Et je n'ai jamais vu l'opérateur d'affectation écrit comme une fonction libre.
              • 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.

              Surcharge opérateur =

              × 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