2011-08-22 7 views
33

Recibo el error: identificador "cadena" indefinido.identificador "cadena" indefinido?

Sin embargo, estoy incluyendo string.h y en mi archivo principal, todo está funcionando bien.

CÓDIGO:

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

Puede alguien por favor me explique por qué está ocurriendo?

+3

Como comentario al margen, se debe utilizar incluyen guardias en tu código Si su compilador mejora con la directiva '#pragma once', combine los dos:' #ifndef XXX_HEADER // #define XXX_HEADER // #pragma una vez // ... // # endif' donde la orden es importante (es decir, incluya protector que encierra el pragma) –

Respuesta

60

<string.h> es el encabezado C anterior. C++ proporciona <string>, y luego debe ser referido como std::string.

+3

/facepalm. Me siento como un idiota. Gracias. – Rhexis

+3

usando namespace std – TechplexEngineer

+4

No 'usando namespace std', ya he votado negativamente todas las respuestas que lo recomiendan por alguna razón. – Puppy

8

Porque string se define en el espacio de nombres std. Reemplazar string con std::string, o añadir

using std::string; 

por debajo de sus líneas include.

Probablemente funciona en main.cpp porque algún otro encabezado tiene esta línea using (o algo similar).

11

Quiere hacer #include <string> en lugar de string.h y luego el tipo cadena vive en el espacio de nombres estándar, por lo que tendrá que usar std::string para referirse a él.

4

Quizás quiso #include<string>, no <string.h>. std::string también necesita una calificación de espacio de nombres o una directiva explícita using.

2

Olvidó el espacio de nombres al que se refiere. Añadir

using namespace std;

para evitar std :: string todo el tiempo.

+3

Para aquellos que votaron negativamente: gracias por sus constructivos comentarios: P – m0skit0

+2

'using namespace std;' es realmente malo, especialmente en un encabezado. – Puppy

+1

Gracias! ¿Puedes explicar por qué? – m0skit0

1

#include <string> sería la correcta C++ incluye, también es necesario especificar el espacio de nombres con std::string o más generalmente con using namespace std;

2

Debe utilizar espacio de nombres std. Si este código en main.cpp debe escribir

using namespace std; 

Si esta declaración es en la cabecera, entonces no debe incluir espacio de nombres y acaba de escribir

std::string level;