2011-02-04 7 views
5

Je suis novice en C++ mais je n'arrive pas à comprendre pourquoi cela ne se compilera pas pour moi. Je cours sur un Mac, codant avec Xcode, mais je construis avec mon propre makefile de bash.C++ g ++ ne trouve pas de type 'chaîne' dans le fichier d'en-tête de la classe

Quoi qu'il en soit, je reçois deux erreurs de compilation que le type de «chaîne» ne peut pas être trouvé, même si j'ai inclus. Toute aide serait la bienvenue. Code:

//#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 

j'inclure ce fichier dans mon main.cpp, et ailleurs dans le principal j'utiliser le type string et cela fonctionne très bien. Bien que dans le principal j'ai inclus iostream au lieu de string (à d'autres fins). Oui, j'ai aussi essayé d'inclure iostream dans ma classe AppController mais cela n'a rien résolu (je ne m'y attendais pas vraiment non plus). Donc, je ne suis pas vraiment sûr de quel est le problème. Des idées?

Répondre

30

chaîne est dans l'espace de noms std.

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

Vous pouvez également utiliser

using namespace std; 

Cependant, ceci est une très mauvaise chose à faire en-têtes car il pollue l'espace de noms global pour toute personne qui inclut ladite tête. C'est bien pour les fichiers sources. Il y a une syntaxe supplémentaire que vous pouvez utiliser (qui a quelques-uns des mêmes problèmes que l'espace de noms en utilisant le fait):

using std::string; 

Cela apportera également le nom du type de chaîne dans l'espace de noms global (ou l'espace de noms en cours), et comme cela devrait généralement être évité dans les en-têtes.

+1

+ 1 pour éviter «using namespace» dans les en-têtes –

+0

+1 pour décrire la réponse. Mentionner le moyen de mise en œuvre possible. – Tirth

Questions connexes