2011-08-22 15 views
33

Sto ricevendo l'errore: identificatore "stringa" indefinito.identificatore "stringa" indefinito?

Tuttavia, sto includendo string.h e nel mio file principale, tutto funziona correttamente.

CODICE:

#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(); 
}; 

Qualcuno può spiegare a me perché questo sta accadendo?

+3

Come commento lato, si dovrebbe usare includono guardie nel tuo codice. Se il tuo compilatore funziona meglio con la direttiva '#pragma once', combina i due:' #ifndef XXX_HEADER // # definisce XXX_HEADER // #pragma una volta // ... // # endif' dove l'ordine è importante (es. guardia che racchiude il pragma) –

risposta

60

<string.h> è la vecchia intestazione C. C++ fornisce <string> e quindi dovrebbe essere indicato come std::string.

+3

/facepalm. Mi sento un idiota. Grazie. – Rhexis

+3

utilizzando lo spazio dei nomi std – TechplexEngineer

+4

Non utilizzare 'namespace std', ho già messo a svantaggio tutte le risposte che lo raccomandano per un motivo. – Puppy

8

Perché è definito nello stato . Sostituire string con std::string, o aggiungere

using std::string; 

sotto le include linee.

Probabilmente funziona in main.cpp perché qualche altra intestazione ha questa riga using (o qualcosa di simile).

11

Si desidera eseguire #include <string> anziché string.h e quindi la stringa di tipo risiede nello spazio dei nomi std, quindi è necessario utilizzare std::string per fare riferimento ad esso.

4

Forse si voleva #include<string>, non <string.h>. std::string richiede anche una qualifica di spazio dei nomi o una direttiva esplicita using.

2

Hai dimenticato lo spazio dei nomi a cui ti riferisci. Aggiungi

using namespace std;

da evitare std :: string tutto il tempo.

+3

Per chi ha downvoted: grazie per i tuoi commenti costruttivi: P – m0skit0

+2

'using namespace std;' è davvero pessimo, specialmente in un'intestazione. – Puppy

+1

Grazie! Puoi spiegare perché, per favore? – m0skit0

1

#include <string> sarebbe la C++ corretto includono, inoltre è necessario specificare lo spazio dei nomi con std::string o più in generale con using namespace std;

2

È necessario utilizzare namespace std. Se questo codice nel main.cpp si dovrebbe scrivere

using namespace std; 

se questa dichiarazione è in intestazione, allora non si dovrebbe includere spazio dei nomi e basta scrivere

std::string level;