2011-02-04 9 views
5

Soy nuevo en C++ pero no puedo entender por qué esto no compilará para mí. Me estoy ejecutando en una Mac, codificando con Xcode, pero estoy compilando con mi propio archivo makefile de bash.C++ g ++ no puede encontrar el tipo de 'cadena' en el archivo de encabezado de clase

De todos modos, estoy obteniendo dos errores de compilación que no se puede encontrar el tipo de "cadena", aunque he incluido. Cualquier ayuda sería bienvenida. Código:

//#include <string> // I've tried it here, too. I'm foggy on include semantics, but I think it should be safe inside the current preprocessor "branch" 
#ifndef APPCONTROLLER_H 
#define APPCONTROLLER_H 

#include <string> 
class AppController { 
// etc. 
public: 
    int processInputEvents(string input); //error: ‘string’ has not been declared 
    string prompt(); //error: ‘string’ does not name a type 
}; 
#endif 

que incluye este archivo en mi main.cpp, y en otras partes principal que utilizar el tipo de string y funciona muy bien. Aunque en main he incluido iostream en lugar de string (para otros fines). Sí, también intenté incluir iostream en mi clase AppController pero no resolvió nada (tampoco lo esperaba).

Así que no estoy muy seguro de cuál es el problema. ¿Algunas ideas?

Respuesta

30

cadena está en el espacio de nombres estándar.

#include <string> 
... 
std::string myString; 

Alternativamente, puede utilizar

using namespace std; 

Sin embargo, esta es una muy mala cosa que hacer en los encabezados, ya que va a contaminar el espacio de nombres global para cualquier persona que incluya dicha cabecera. Sin embargo, está bien para los archivos fuente. Existe una sintaxis adicional, puede usar (que tiene algunos de los mismos problemas que el uso de espacio de nombres hace):

using std::string; 

Esto también traerá el nombre de tipo cadena en el espacio de nombres global (o el espacio de nombres actual), y como por lo general, se debe evitar en los encabezados.

+1

+1 para evitar 'usar el espacio de nombres' en los encabezados –

+0

+1 para describir la respuesta. Mencionando una posible forma de implementación. – Tirth

Cuestiones relacionadas