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 :

Valeur de retour de la surcharge operator[]


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    D�cembre 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 6
    Par d�faut Valeur de retour de la surcharge operator[]
    Bonjour !

    Je rencontre un probl�me sur un code particulier, et le code minimal n'est pas plus aidant.
    Il s'agit d'une classe (ici nomm�e objet) ayant pour seul attribut une std::string.
    L'objectif �tant de pouvoir avoir acc�s � un caract�re de cette string via l'objet et son op�rateur [] : objet.string[i] <=> objet[i]

    Seulement, l'utilisation de l'op�rateur [] pose probl�me dans le cadre des fonctions externes � l'objet.
    En effet, si monObjet[i] marche tr�s bien dans le main, cela n'est pas valable pour la fonction objet2str, qui tente d'employer l'op�rateur [] et qui n'y arrive pas.

    compilation :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    g++ -Wall -Werror  -c *.cpp
    objet.cpp: In function ‘std::string objet2str(const objet*)’:
    objet.cpp:41:33: error: no match foroperator+’ in ‘*(((const objet*)obj) + ((sizetype)(((long unsigned int)i) * 8ul))) + '0'
    La totalit� des fichiers minimaux sont ici :
    main.cpp :
    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
     
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <sstream>
    #include <string>
    // LOCAL MODULES
    #include "objet.h"
     
     
    int main(int argc, char* argv[]) {
            objet obj("101010");
            std::cout << obj[0] << std::endl;
     
            return EXIT_SUCCESS;
    }

    objet.cpp :
    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
    27
    28
    29
    30
    31
     
    #include "objet.h"
     
    /***************************************************
     * CONSTRUCTOR
     ***************************************************/
    objet::objet(const std::string sequence) {
            value = sequence;
    }
     
    /***************************************************
     * OPERATORS
     ***************************************************/
    char objet::operator[](const unsigned int id) const {
            return value[id];
    }
     
    /***************************************************
     * OTHER FUNCTIONS 
     ***************************************************/
    /*
     * CONVERSIONS
     */
    std::string objet2str(const objet* const obj) {
            std::string str = "";
            for(unsigned int i = 0; i < obj->len(); i++) {
                    str += (obj[i])+'0'; // ERREUR
                    // Il semblerait que obj[i] renvois un objet, non un char !
            }
            return str;
    }

    objet.h:
    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
    27
    28
    29
    30
    31
    32
    #ifndef objet_H_INCLUDED
    #define objet_H_INCLUDED
    /*
     * LIBRARIES
     */
    // STD LIB
    #include <iostream>
    #include <cstdlib>
    #include <string>
     
    /*
     * objet CLASS
     */
    class objet {
    	public:
    	// CONSTRUCTOR
    		objet(const std::string);
    	// ACCESSORS
                    unsigned int len() const { return value.size(); }
            // OPERATORS
                    char operator[](const unsigned int) const;
    	private:
    	// ATTRIBUTES
                    std::string value; 
    };
     
    /*
     * OTHER FUNCTIONS
     */
    std::string objet2str(const objet*const);
     
    #endif

    Lorsque la ligne probl�matique est retir�e, le main fonctionne pour ainsi dire parfaitement. (obj[0] renvois bien 1)



    En vous remerciant de votre aide.


    PS: ce code est un code minimal. Les algorithmes mis en oeuvre sont donc souvent illogiques tels quels.

  2. #2
    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
    Dans ta fonction, obj est un pointeur sur object. Donc, quand tu �cris obj[3], il pense que ce pointeur pointe sur le premier �l�ment d'un tableau d'objets, et que tu demandes � ce qu'il retourne le troisi�me �l�ment de ce tableau.

    donc deux solutions : Soit tu �cris (*obj)[i], soit tu modifie ta fonction pour qu'elle prenne en param�tre une r�f�rence � un obj, et non un pointeur (c'est probablement pr�f�rable).
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    D�cembre 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 6
    Par d�faut
    Merci beaucoup JolyLoic !

    Une erreur que j'aurais d� savoir relever moi-m�me...



    Surcharger l'op�rateur [] pour qu'il prennent en charge les pointeurs d'objet est aussi une solution viable, non ?

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Non c'est impossible de surcharger pour les types de bases, et le pointeur (quel que soit la donn�e point�e) est un type de base.
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    D�cembre 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 6
    Par d�faut
    Effectivement, j'aurais d� r�fl�chir avant de poster.

    Bref, je vous remercie pour vos r�ponses !


    Sujet r�solu !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. surcharge operator[] probl�me type retour
    Par -Gesicht- dans le forum C++
    R�ponses: 9
    Dernier message: 13/06/2013, 01h04
  2. fonction operator, valeur de retour
    Par butch dans le forum C++
    R�ponses: 21
    Dernier message: 20/09/2004, 10h30
  3. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 17/08/2004, 17h16
  4. Valeur de retour d'une proc�dure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    R�ponses: 4
    Dernier message: 16/04/2004, 16h45
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    R�ponses: 33
    Dernier message: 18/01/2004, 13h58

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