Partage
  • Partager sur Facebook
  • Partager sur Twitter

String does not name a type

    3 février 2012 à 12:18:01

    Bonjour,
    Me voici avec mon deuxième programme et une erreur que je ne comprend pas, peut être un problème de bibliotheque.
    Je déclare dans un fichier .h une classe comportant plusieurs string seulement lors de la compilation le terminal affiche "string does not name a type". Puis par la suite : 'struct Voiture' has no member name 'modele'. Sachant que ces deux erreurs se répètent pour chaque string déclaré.

    Voici le .h en question :


    #ifndef VOITURE_H_INCLUDED
    #define VOITURE_H_INCLUDED

    struct Voiture
    {
    string modele;
    string immatriculation;
    int kilometrage;
    string disponible;
    };


    Voiture *lireDonnees (int &n);

    int menu();

    void afficheDisponible (Voiture *V, int n);

    void loue(Voiture &v);

    void louer(Voiture *V, int n);

    void retour(Voiture &v);

    void retourner(Voiture *V, int n);

    #endif


    De plus il y a tout à la fin de la serie d'erreur affichées par le terminal une erreur que je n'ai encore jamais vus : make : *** [main.o] Erreur 1

    J'ajoute de plus les déclaration de mes fonctions dans le .cpp si jamais celà peut vous servir :

    cout << " 0: Fin du prrogramme"<< endl;
    cout << " Votre choix :"<< endl;
    int n;
    do{cin>>n;} while (n<0 || n<3);
    return n;
    }



    void afficheDisponible (Voiture *V, int n)
    {
    cout <<" Les voitures disponibles sont : "<<endl;
    for (int i=0; i<n; i++)
    {
    if (V[i].disponible=="OUI")
    {
    cout << V[i].modele<<" "<< V[i].immatriculation<<" "<<V[i].kilometrage<< endl;
    }
    }
    }



    void loue (Voiture &v)
    {
    if (v.disponible=="NON")
    {cout <<" Voiture déjà louée !"<<endl;}
    else
    {v.disponible="NON";}
    }

    void louer (Voiture *V, int n)
    {
    cout << " Quelle est l'immatriculation de la voiture à louer ?"<<endl;
    string immatriculation2;
    cin >> immatriculation2;
    for (int i=0; i<n; i++)
    {
    if (immatriculation2==V[i].immatriculation)
    {loue(V[i]);
    return;
    }
    }
    cout << " L'immatriculation demandée n'a pas été trouvée dans la base de données. "<< endl;
    }



    void retour (Voiture &v)
    {
    if (v.disponible=="OUI")
    {cout << " Erreur : cette voiture n'est pas louée. "<<endl;}
    else
    {int kilometrage2;
    do{ cout << " Combien de kilometre doit on ajouter ?"<<endl;
    cin >> kilometrage2;} while (kilometrage2<0);
    v.kilometrage= v.kilometrage+kilometrage2;
    v.disponible="OUI";
    }
    }



    void retourner (Voiture *V, int n)
    {
    cout << " Quelle est l'immatriculation de la voiture à louer ?"<<endl;
    int immatriculation3;
    cin>> immatriculation3;
    for (int i=0; i<n; i++)
    {
    if (immatriculation3==V[i].immatriculation)
    {retour(V[i]); return;}
    }
    cout << " Cette voiture n'apparait pas dans la base de données."<<endl;
    }



    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2012 à 12:40:37

      Merci d'utiliser les balises de code.

      L'erreur vient certainement du fait que tu n'inclus pas la librairie et/ou n'appliques pas le namespace std.
      • Partager sur Facebook
      • Partager sur Twitter
      Je ne suis responsable que de ce que je dis, pas de ce que vous comprenez... - /!\ Négligences de sécurité sur OpenClassrooms /!\
        3 février 2012 à 13:02:26

        Désolé pour els balises de codes je ne les avait pas vus. Alors j'y ai pensé, pourtant dans mon .cpp il y a bien #include <string> ainsi que dans mon main. J'ai essayer de le mettre dans le .h mais ca ne change rien.

        Voici le début du cpp et du main : (dans le main voiture.h est remplacé par voiture.cpp)

        #include <iostream>
        #include <string>
        #include <fstream>
        #include "voiture.h"
        
        using namespace std;
        


        c'est vraiment étrange car j'ai la correction de cette exercice, j'ai à peu de chose près la même chose que le prof et ma structure est parfaitement identique. Le prof nous avait fait faire cet exercice sur codeblocks sous windows.
        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2012 à 13:06:31

          C'est également nécessaire dans le .h
          ...
          • Partager sur Facebook
          • Partager sur Twitter
          Je ne suis responsable que de ce que je dis, pas de ce que vous comprenez... - /!\ Négligences de sécurité sur OpenClassrooms /!\
            3 février 2012 à 15:19:14

            Citation : polsk

            dans le main voiture.h est remplacé par voiture.cpp


            Dans ton main tu dois inclure "voiture.h" et non pas "voiture.cpp".
            • Partager sur Facebook
            • Partager sur Twitter
            ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
              4 février 2012 à 11:21:23

              Dans ton fichier .h l'include #include <string> est obligatoire.
              De même dans .cpp
              using namespace std;
              
              • Partager sur Facebook
              • Partager sur Twitter
                4 février 2012 à 14:06:10

                Dans les .h c'est pas une bonne idée de mettre

                using namespace std;
                


                car ça se propage dans tout les fichiers qui incluent le .h contenant cette ligne. Il vaut mieux rajouter std:: devant les classes de la bibliothèque standard, et rajouter le using namespace dans les .cpp.
                • Partager sur Facebook
                • Partager sur Twitter

                String does not name a type

                × 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