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

Discussion :

Variable de type string dans une méthode

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Points : 29
    Points
    29
    Par défaut Variable de type string dans une méthode
    bonjour à tous,

    Merci de m'avoir bien aidé avant hier, ça 'ma beaucoup dépanné. j'ai avancé cahin caha aujourd'hui et j'ai de nouveau un nouveau petit problème quand à la déclaration d'une nouvelle méthode. J'aimerais mettre en variable un string. Or, je n'y arrive pas.

    beton.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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #ifndef BETON_H_INCLUDED
    #define BETON_H_INCLUDED
    #include <string>
    #include <math.h>
     
     
    class Beton
    {
    public:
    Beton();
     
    void assignerHauteur(double h);
    void assignerLargeur(double h);
    void assignerEnrobage(double h);
    void assignerMoment(double h);
    void assignerTranchant(double h);
    void assignerFck(double h);
    void assignerFyk(double h);
    void assignerClassAcier(string h);
     
    double getAs();
     
    void calculurd();
    void calculw();
    void calculAs();
     
     
    private:
     
    double hauteur;
    double largeur;
    double enrobage;
    double moment;
    double tranchant;
     
    double fck;
    double fyk;
    double fcd;
    double fyd;
     
    double euk;
     
    double urd;
    double w;
     
    double As;
    //double Ass;
    //double Asw;
     
     
    };
     
    #endif // BETON_H_INCLUDED
    beton.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
     
     
     
    #include "Beton.h"
     
     
     
    Beton::Beton()
    {
     
    // blabla 
     
    void Beton::assignerClassAcier(string h)       // assigne class de l'acier
    {
        if(h="A")
        {
            Beton::euk= 0.025;
        }
        if(h="B")
        {
            Beton::euk= 0.05;
        }
        if(h="C")
        {
            Beton::euk= 0.06;
        }
     
    }
    }
    erreur:


    Beton.h:20: error: 'string' has not been declared
    Beton.cpp:13: error: variable or field 'assignerClassAcier' declared void
    Beton.cpp:13: error: 'string' was not declared in this scope
    mingw32-make[1]: *** [debug/Beton.o] Error 1
    mingw32-make[1]: Leaving directory `D:/c++/beton'
    mingw32-make: *** [debug] Error 2
    Manifestement, il ne reconnait pas le type string. Quelqu'un aurait-il une idée?

    Merci d'avance ;-)

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 665
    Points : 188 673
    Points
    188 673
    Par défaut


    Tu commets un sacrilège : tu utilises quelque chose qui n'existe pas.

    En fait, c'est juste un sacrilège d'utiliser les chaînes de caractères de la STL (donc std::string, pas string) au lieu des QString, qui offrent bien des avantages (comme le support des encodages).

    N'oublie pas non plus d'indenter ton code, autant dans l'en-tête que dans l'implémentation, ça en facilitera la lecture.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Hello,

    Merci pour la réponse,

    Je comprends bien qu'il est possible d'utiliser des Qstring, cependant, imaginons que pour ma part, ce soit plus simple de tout reconvertir en string pour la simple et bonne raison que ça m'évitera de réécrire pas mal de code déjà écris dans d'autre programme. N'est-il pas possible de lui faire "avaler" des string?

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 665
    Points : 188 673
    Points
    188 673
    Par défaut
    Si, sans aucun problème. Il suffit de lui donner le bon nom. Tu as sûrement eu la très mauvaise habitude de mettre des using namespace std; partout. Il te suffit d'en simuler la présence en ajoutant l'espace de noms dans lequel string est définie avec l'opérateur de portée : std::string (ça fait soudain moins pédant ). (Ou alors tu clapes un using... dans ton .cpp, ça ne devrait pas porter de conséquence autre que celle de faire fonctionner ton code).

    En passant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        if(h="A")
        {
            Beton::euk= 0.025;
        }
        if(h="B")
        {
            Beton::euk= 0.05;
        }
        if(h="C")
        {
            Beton::euk= 0.06;
        }
    1. Ce n'est sûrement pas ce que tu voulais faire (vive le yoda speak dans ce cas). Tu veux faire un test, pas une assignation, non ?
    2. Ce n'est pas optimisé : même si tu rentres dans le premier cas, tu vas tester le suivant.
    3. Ce n'est pas orienté objet : que vas-tu faire si tu dois ajouter un nouveau type de béton ? Ajouter un if dans cette méthode ?
    4. Tes noms de méthodes sont absolument tout sauf ce qu'il faut faire (par hasard, aurais-tu eu des cours sur le sujet ? c'est là qu'on ancre de mauvaises habitudes) : moitié en anglais et moitié en français pour getAs(), un préfixe long et à rallonges pour les setters (assigner~ au lieu d'un plus habituel set~), ça suffit pour dire que c'est excellent d'avoir un EDI qui dispose d'autocomplétion.
    5. Au fait, pourquoi avoir défini cette méthode dans ton constructeur ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Hourra merci ^^

    Alors pour te répondre, en effet, je pourrais améliorer le test. Cependant, je débute un peu et j'ai pas encore pris la peine d'optimiser mon code. J'apprends petit bout par petit bout. concernant l'anglais, en effet, le mix français anglais c'est pas top, je prend pas assez le temps d'écrire le code, mais je crois que je vais suivre ton conseil et prendre un peu les poussière et réarranger tout cela. Par contre, ces méthodes (get, set) ne se trouvent pas dans le constructeur.

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 665
    Points : 188 673
    Points
    188 673
    Par défaut
    Citation Envoyé par bubblebe Voir le message
    Cependant, je débute un peu et j'ai pas encore pris la peine d'optimiser mon code.
    Ce n'est pas encore vraiment de l'optimisation, c'est aussi de la logique : ainsi, il est possible que tu aies un bogue bizarroïde (notamment si tu commences à évaluer une autre condition par après).

    Il vaudrait mieux utiliser un switch, mais ça ne fonctionnera pas avec des strings. Le mieux est encore de faire sauter les tests et de passer à de la POO, de la vraie !

    Citation Envoyé par bubblebe Voir le message
    Par contre, ces méthodes (get, set) ne se trouvent pas dans le constructeur.
    Ah ? Ou alors c'est une erreur de copier-coller.

    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
    Beton::Beton()
    {
     
    // blabla 
     
    void Beton::assignerClassAcier(string h)       // assigne class de l'acier
    {
        if(h="A")
        {
            Beton::euk= 0.025;
        }
        if(h="B")
        {
            Beton::euk= 0.05;
        }
        if(h="C")
        {
            Beton::euk= 0.06;
        }
     
    }
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    je confirme une erreur du copier collé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme de retour d'un type ArrayList dans une méthode JAVA
    Par KnowPart dans le forum Collection et Stream
    Réponses: 20
    Dernier message: 21/01/2011, 09h40
  2. [SSIS] variable de type object dans une requete
    Par Huston dans le forum SSIS
    Réponses: 1
    Dernier message: 09/06/2010, 19h13
  3. [MySQL] insertion d'un variable de type chaine dans une base
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/03/2009, 15h20
  4. variable de type string dans une requete sql
    Par hammag dans le forum JDBC
    Réponses: 9
    Dernier message: 15/06/2008, 01h32
  5. [formatage d une variable date vers string dans une jsp]
    Par jayjaypg22 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/12/2007, 17h03

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