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 :

une fonction d'affichage � rajouter


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut une fonction d'affichage � rajouter
    bonjour

    j'ia un code qui compile sous visual c++6.0 mais ne compile pas sur devc++.
    je voudrai �viter ces erreurs sur devc++, pourriez vous m'aider?
    (les ptis warning ou erreurs peuvent qq fois montrer qu'un code est peu rigoureux ou qu'il y a un risque qq part donc je voudrai juste �viter les messages d'erreurs).
    merci

    voil� 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <string.h> // strcpy(); strlen();
    #include <conio.h> // getch();
    #include <iostream> // cout et cin
    using namespace std;
     
    class String
    {
    // private :
        int nbr;
        char *ptr;
    public:
        String (char[]);
        String (char);
        ~String();
        String& operator=(const String &);
        String(const String &);
        String plus (const String &); 
    };     
     
    String String::plus(const String &s)
    {
        char *chaine = new char[nbr+s.nbr-1];
        for(int i=0;i<nbr-1;i++)     // strcpy(chaine,ptr);               l66
            chaine[i]=ptr[i];        
        for(i=nbr-1;i<nbr+s.nbr-1;i++)    // strcat(chaine,s.ptr);       l68
            chaine[i]=s.ptr[i-nbr+1];       
        String resultat(chaine);
        delete chaine;
        return (resultat); 
    }
     
    void main ()
    {
        String s1("azerty"),s2('q');
     
        String s3=s1.plus(s2);
     
        s3=s1.plus('w');
        getch(); 
    }
    les erreurs sont les suivantes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    In member function `String String::plus(const String&)':
     
    68: error: name lookup of `i' changed for new ISO `for' scoping
     
    66: error:   using obsolete binding at `i'
    66: error:   At global scope:
    MERCI d'avance.

    ps : remplacer par strcpy et ctrcat r�gle le probl�me mais comment avec seulement 2 fort j'obtiens 4 erreurs

  2. #2
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    salut,

    c'est normal que �a plante. c'est dev c++ qui a raison. visual l'accepte, mais il ne devrait pas (par rapport au standard).

    ta variable i est d�clar�e localement, sa port�e est limit�e � la 1ere boucle for. elle n'existe plus lors de l'appel dans la 2� boucle, d'o� le caract�re "obsol�te" de la variable.

    solution : soit red�clarer "i" dans la 2� boucle, soit en faire une variable dont la port�e couvre toute la fonction

    // solution 1
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String String::plus(const String &s)
    {
        char *chaine = new char[nbr+s.nbr-1];
        for(int i=0;i<nbr-1;i++)                 chaine[i]=ptr[i];       
        for(int i=nbr-1;i<nbr+s.nbr-1;i++)   chaine[i]=s.ptr[i-nbr+1];       
        String resultat(chaine);
        delete chaine;
        return (resultat);
    }
    // solution 2
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String String::plus(const String &s)
    {
        int i;
        char *chaine = new char[nbr+s.nbr-1];
        for(i=0;i<nbr-1;i++)                 chaine[i]=ptr[i];       
        for(i=nbr-1;i<nbr+s.nbr-1;i++)   chaine[i]=s.ptr[i-nbr+1];       
        String resultat(chaine);
        delete chaine;
        return (resultat);
    }

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    Merci bigboomshakala ! 8)

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    j'ai � pr�sent un programme avec

    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
    33
    #include <string.h> // strcpy(); strlen();
    #include <conio.h> // getch();
    #include <iostream> // cout et cin
    using namespace std;
     
    class String
    {
    // private :
        int nbr;
        char *ptr;
    public:
        String (char[]);
        String (char);
        ~String();
        String& operator=(const String &);
        String(const String &);
        String plus (const String &); 
        getString (const String &);
    };                                  
     
    String String::plus(const String &s)
    {
        int i; 
     
        char *chaine = new char[nbr+s.nbr-1]; // alloue un tableau de caractères   
        for(i=0;i<nbr-1;i++)         // strcpy(chaine,ptr);
            chaine[i]=ptr[i];        
        for(i=nbr-1;i<nbr+s.nbr-1;i++)    // strcat(chaine,s.ptr);
            chaine[i]=s.ptr[i-nbr+1];     caractères     
        String resultat(chaine);
        delete[] chaine; 
        return (resultat); 
    }
    et le main avec :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    String s1("azerty"),s2('q');
    String s3=s1.plus(s2);
    cout<<"s3 = "<<s3.getString()<<endl;
    => comment faire afficher s3.getString?

    j'ai rajout� " getString (const String &); " tout en haut dans les d�claration

    et j'essaie la fonction

    String::getString (const String &s);
    {
    int i
    for(i=0;i<s.nbr;i++)
    printf("%c", // l� je bloque
    }

    j'essaie d'afficher les lettre de la chaine mais j'ai qu'un pointeur dans mon objet String.
    j'ai pas de nom de type tableau[i] � afficher. je veux afficher les cases du tabeau (inconnu?) d�sign� par le pointeur ptr,
    je pensais � un (s.(*ptr))[i] �a existe? c'est (le contenu du pointeur)de l'objet s. donc le contenu du pointeur est une case et je met [i] pour avoir la 1�re case.
    ensuite je pourrait remplacer le printf par cout.
    et � la fin une fois que j'aurai compris, il faudrait que ma fonction soit un peu modifi�e pour renvoyer un objet.
    et mais l� avec le cout le "s3.getString()" me pose probl�me : y a t'il une fonction qui lit et affiche � l'�cran les caract�res d'un tableau ?

    si vous pouviez m'aider , �a serait tr�s sympa

    Merci d'avance.

  5. #5
    Membre confirm� Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Par d�faut
    pourquoi n'utilises-tu pas la classe string standard ???

  6. #6
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    salut,

    n'utilises pas printf(), c'est du C �a et si tu fais du C++ il faut essayer de l'�viter au maximum (normalement on peut toujours s'en passer). pour les include il faut mettre <cstring>, c'est pareil que <string.h>, mais maintenant l'en-tete .h n'est plus standard (voir FAQ).

    au lieu de faire une m�thode getString, fais une surcharge de l'op�rateur de flux << dans la classe String afin de pouvoir �crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    String s(...);
    ...
    cout << s;
    si tu ne sais pas faire, fais une recherche dans la FAQ ou sur Google, yora des exemples. et si tu veux vraiment utiliser getString(), alors c'est exactement la fonctino est la m�me, sauf que tu �criras
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    String s(...);
    ...
    cout << s.getString();

    Citation Envoy� par hamster
    pourquoi n'utilises-tu pas la classe string standard ???
    �a doit �tre un exercice j'imagine. j'ai d�j� eu � faire une classe String en TP et kek ann�es.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    ben je suis d�butant et l'exo a �t� corrig� mais qq fonction ne l'ont pas �t�.
    j'aurai souhait� avoir un programme le plus complet possible mais j'ai bcp de mal.
    j'y vais �tape par �tape.
    je sais que fo mettre cout au lieu de printf mais j'essayais d�j� de voir si j'arrivais � afficher un caract�re.

    avant tout, ce que j'aimerai r�soudre c comme afficher le caract�re du tablo donc je connais pas le nom mais je sais que dans String y a un pointeur.
    je bloque l� :

    j'essaie d'afficher les lettre de la chaine mais j'ai qu'un pointeur dans mon objet String.
    j'ai pas de nom de type tableau[i] � afficher. je veux afficher les cases du tabeau (inconnu?) d�sign� par le pointeur ptr,
    je pensais � un (s.(*ptr))[i] �a existe? c'est (le contenu du pointeur)de l'objet s. donc le contenu du pointeur est une case et je met [i] pour avoir la 1�re case.
    Merci

  8. #8
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    j'ai pas trop compris ce que tu essaies de dire.

    tu veux afficher les caract�res point�s par 'ptr'. tu sais qu'il y a 'nbr' caract�res (je suppose que nbr est le nombre de caract�res point�s par ptr?).

    il te suffit de faire une boucle for grace � laquelle tu affiches les caract�res 1 par 1.

  9. #9
    Membre confirm�
    Inscrit en
    Janvier 2005
    Messages
    36
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 36
    Par d�faut
    si tu as

    alors les deux ecriture suivante sont identique

    a mon avis ce que tu cherche ressemble a


  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    Merci dok3, c exactement ce que je cherchais. je comprend mieux les choses pratiques

    j'avance un peu mieux

    � pr�sent j'ai

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    class String
    {
    // private :
        int nbr;
        char *ptr; // <=> ptr[i]  <=>  *(ptr+i) 
        static int compteur; // les variables statiques sont implicitement initialisées à zéro
    public:
        String (char[]);
        String (char);
        ~String();
        String& operator=(const String &);
        String(const String &);
        String plus (const String &); 
        void getString();
        static int nombreChaines() {return compteur;}
    };                                   
     
    String::String(char ch[])
    {
        ++compteur;
        nbr=strlen(ch)+1;
        ptr=new char [nbr];
            for (int i=0;i<nbr;i++) // <=> strcpy(ptr,ch);
            ptr[i]=ch[i];  
    }
     
    String::String(char c)
    {
        ++compteur;
        nbr=2;
        ptr=new char[nbr];
        ptr[0]=c;
        ptr[1]='\0';    
    }
     
    String::~String()
    {
        --compteur;
        delete ptr;     
    }
     
    void String::getString(void)
    {
        int i;
        for(i=0;i<nbr;i++)
        cout<<ptr[i];
    }
     
    int main ()
    {
        String s1("azerty"),s2('q');
        cout<<"nombre d'objets = "<<String::nombreChaines(); 
        String s3=s1.plus(s2);
        s3.getString(); // OK
      //  cout<<"s3 = "<<s3.getString()<<endl;       probleme ICI
        s3=s1.plus('w');
        getch();
    }
    ma fonction getString marche mais comment la modifier pour que �a marche avec cout<<s3.getString() ??on veut que cout affiche une chaine de caract�re donc que getstring renvoie ptr[i] ?
    je vois pas comment modifier cette fonction, ce qu'elle va renvoyer parce que cout peut afficher un carcat�re � la fois donc comment peut il comprendre d'acc�der plusieurs fois � getstring si getstring renvoyait un caract�re.

    En regardant dans un livre, j'ai mis un compteur en priv� statique et j'ai mis la fonction qui va avec.
    j'ai une les meme mesage d'erreur sur devc++ :
    fichier.cpp: linker error : more undefined references to `String::compteur' follow
    les lignes ne sont pas pr�cis�es par le compilo.

    (visual compile mais ne peux construire l'ex�cutable)

    Merci encore � vous tous

  11. #11
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par d�faut
    c'est mieux que ta fonction getString renvoie qqchose si tu veux l'afficher.
    et l'op�rateur d'injection doit �tre surcharg� pour la classe de l'objet que tu renvoies.
    voir un cours sur la surcharge d'op�rateur

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    bonjour

    c'est mieux que ta fonction getString renvoie qqchose si tu veux l'afficher
    lol je sais aussi mais je sais pas comment faire
    qqn pourrait-il modifier ou m'indiquer comment modifier l�g�rement la fonction de fa�on �a ce que �a renvoie qqch (et renvoyer quoi? un char[] ?) de mani�re � ce que le cout puisse envoyer le "truc" renvoy�.

    l'op�rateur d'injection doit �tre surcharg� pour la classe de l'objet que tu renvoies
    what's that? ce qui veut dire plus explicitement?

  13. #13
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    String String::plus(const String &s)
    j'ai d�j� �a pour surcharger l'operateur
    enfin j'avais fait une fonction operator+ mais bon je vois pas trop le rapport avec ce que je veux.

    est-ce que les modification sont vraiment importantes pour passer de s3.getString() � cout<<s3.getString() ?

    sinon tant pis, je vais me contenter de ce que j'ai.

  15. #15
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    avant de continuer, lis un tutoriel sur les flux (<<,>>) et sur la surcharge d'op�rateurs. parce que l� j'ai l'impression que tu fais de la bidouille.

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    salut

    je viens de voir, dans le code pr�c�dent que j'ai post�, y a une erreur o� vous avez oubli� de me r�pondre, en fait j'ai mis un compteur en priv� statique et j'ai mis la fonction qui va avec.
    j'ai les meme mesage d'erreur sur devc++ :
    fichier.cpp: linker error : more undefined references to `String::compteur' follow
    les lignes ne sont pas pr�cis�es par le compilo.

    (visual compile mais ne peux construire l'ex�cutable)

    comment corriger cela?

    Merci bcp

  17. #17
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par d�faut
    je pense que la r�ponse se trouve encore dans la FAQ
    http://c.developpez.com/faq/cpp/?pag...SS_init_static

    initialisation explicite en dehors de la d�claration de la classe

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par d�faut
    MERCI BCP

    (je venais de lire dans un bouquin que la d�claration �tait implicite pour les var static, apparemment c pas le cas)

Discussions similaires

  1. Activation ou non d'une fonction d'affichage dans une fen�tre d'une image
    Par Aquarium33 dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 30/03/2012, 11h30
  2. [XL-2000] recherche une fonction d'affichage particulier des colonnes
    Par pat91 dans le forum Excel
    R�ponses: 20
    Dernier message: 24/05/2009, 00h45
  3. cr�ation d'une fonction d'affichage.
    Par Empty_body dans le forum Langage
    R�ponses: 2
    Dernier message: 12/06/2007, 11h20
  4. R�ponses: 1
    Dernier message: 23/02/2007, 08h49
  5. Affichage p�riodique d'une fonction
    Par boobob dans le forum C
    R�ponses: 16
    Dernier message: 08/12/2003, 16h06

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