73 votes

identifiant "string" indéfini ?

Je reçois l'erreur suivante : l'identifiant "string" est indéfini.

Cependant, j'inclus string.h et dans mon fichier principal, tout fonctionne bien.

CODE :

#pragma once
#include <iostream>
#include <time.h>
#include <string.h>

class difficulty
{
private:
    int lives;
    string level;
public:
    difficulty(void);
    ~difficulty(void);

    void setLives(int newLives);
    int getLives();

    void setLevel(string newLevel);
    string getLevel();
};

Quelqu'un peut-il m'expliquer pourquoi cela se produit ?

3 votes

En guise de commentaire, vous devriez utiliser des gardes d'inclusion dans votre code. Si votre compilateur s'en sort mieux avec le #pragma once combine les deux : #ifndef XXX_HEADER // #define XXX_HEADER // #pragma once // ... // #endif où l'ordre est important (c'est-à-dire la garde de l'include entourant le pragma)

120voto

Puppy Points 90818

<string.h> est l'ancien en-tête C. Le C++ fournit <string> et il faut alors l'appeler std::string .

13 votes

Ne fais pas ça. using namespace std J'ai déjà rétrogradé toutes les réponses qui le recommandent pour une bonne raison.

24voto

Flexo Points 39273

Vous voulez faire #include <string> au lieu de string.h et ensuite le type string vit dans le std vous devrez donc utiliser l'espace de nom std::string pour y faire référence.

14voto

m0skit0 Points 10269

Vous avez oublié l'espace de nom auquel vous faites référence. Ajoutez

using namespace std;

pour éviter d'utiliser std::string tout le temps.

7 votes

Pour ceux qui ont voté contre : merci pour vos commentaires constructifs :P

2 votes

using namespace std; est vraiment mauvais, surtout dans un en-tête.

2 votes

Merci ! Pouvez-vous expliquer pourquoi ?

10voto

Ernest Friedman-Hill Points 56605

Parce que string est défini dans l'espace de nom std . Remplacer string con std::string ou ajouter

using std::string;

sous votre include lignes.

Cela fonctionne probablement dans main.cpp parce qu'un autre en-tête a ceci using (ou quelque chose de similaire).

5voto

Nicol Bolas Points 133791

Peut-être que vous vouliez #include<string> pas <string.h> . std::string a également besoin d'une qualification d'espace de nom, ou d'un explicite using directive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X