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

Langage C++ Discussion :

Surcharge de l'opérateur [] ("must be a nonstatic member function")


Sujet :

Langage C++

  1. #1
    Membre du Club
    Developpeur C
    Inscrit en
    Octobre 2009
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Developpeur C

    Informations forums :
    Inscription : Octobre 2009
    Messages : 48
    Points : 45
    Points
    45
    Par défaut Surcharge de l'opérateur [] ("must be a nonstatic member function")
    Bonjour,

    J'ai plusieurs fois été confronté à ce problème que je n'arrive pas à résoudre..
    Je tente de surcharger un opérateur mais j'ai l'erreur suivante :

    erreur: ‘int operator[](LIST, int)’ must be a nonstatic member function

    J'ai fait quelque recherches sur internet mais je ne comprend toujours pas cette erreur !

    Voici mon code :

    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
     
    #ifndef DEF_LISTE
    #define DEF_LISTE
     
    struct element {
    	int val;
    	element *nxt;
    };
    typedef element * LIST;
     
    void push_t(LIST &lst, const int val);
    void push_b(LIST &lst, const int val);
     
    void pop_t(LIST &lst);
    void pop_b(LIST &lst);
     
    int get_element(LIST lst, int indice);
    int operator[](LIST lst, int indice);
     
    void print_list(const LIST lst);
     
    #endif
    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
     
    int get_element(LIST lst, int indice) {
     
    	if(lst != NULL) {
     
    		if(indice == 0) {
     
    			return lst->val;
     
    		} else {
     
    			return get_element(lst->nxt, indice - 1);
     
    		}
     
    	} else {
     
    		return -1;
     
    	}
     
    }
     
    int operator[](LIST lst, int indice) {
    	return get_element(lst, indice);
    }
    Merci d'avance et bonne journée !

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Voici un exemple de la surcharge de l'opérateur [] dans la FAQ C++
    http://cpp.developpez.com/faq/cpp/?p...HARGE_interdit

    Un tel opérateur (ou une fonction telle que get_element) peut être critiquable pour une liste chaînée.
    Si on utilise une liste chaînée, on veut les opérations suivantes :
    - accès au premier élément
    - accès au dernier élément
    - insertion
    - suppression
    - parcours
    Tout ça pour dire que, si tu veux pouvoir accéder directement à n'importe quel élément (souvent) il serait peut-être plus judicieux d'avoir un containeur comme std::vector

    Pour ton problème en soit, il faut que l'opérateur [] soit déclaré dans la classe.
    Je te conseille de lire le chapitre de la FAQ sur les classes en C++
    http://cpp.developpez.com/faq/cpp/?page=classes
    Selon ton niveau, un cours sur la programmation orientée objet serait peut être plus adpaté (?)

    Sinon, en C++
    Il suffit d'utiliser std::list
    http://www.cplusplus.com/reference/list/list/
    http://en.cppreference.com/w/cpp/container/list

  3. #3
    Membre du Club
    Developpeur C
    Inscrit en
    Octobre 2009
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Developpeur C

    Informations forums :
    Inscription : Octobre 2009
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Merci pour ta réponse !

    Je pourrais en effet utiliser des classes, mais étant donné que c'est un projet pour l'iut et que nous n'avons pas commencer cette partie je vais attendre.

    Ensuite je pourrais aussi utiliser des objets déjà fait mais.. j'aime faire les choses moi-même^^ (surtout que dans l'exercice demandé je pense que c'est préférable^^).

    Je vais me renseigner un peu plus sur les surcharges,

    merci encore et bonne journée !

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par guidono Voir le message
    Je pourrais en effet utiliser des classes, mais étant donné que c'est un projet pour l'iut et que nous n'avons pas commencer cette partie je vais attendre.
    Normalement on ne devrait pas voir la surcharge d'opérateur avant class.
    En C++, struct et class sont très proches. On peut voir struct comme une classe avec public comme visibilité par défaut.

    Citation Envoyé par guidono Voir le message
    Ensuite je pourrais aussi utiliser des objets déjà fait mais.. j'aime faire les choses moi-même^^ (surtout que dans l'exercice demandé je pense que c'est préférable^^).
    std::vector et std::list sont dans la norme C++. Quand on en a besoin, il faut les utiliser pour faire du C++ (propre).
    Dans ton cas, il y a une exception : la dimension pédagogique...

    Bon développement

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/03/2011, 21h33
  2. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  3. [C#] Surcharge de l'opérateur ==
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 16h19
  4. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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