Perché sto ricevendo una stringa non nome un tipo Errore?

game.cpp

#include  #include  #include  #include "game.h" #include "board.h" #include "piece.h" using namespace std; 

game.h

 #ifndef GAME_H #define GAME_H #include  class Game { private: string white; string black; string title; public: Game(istream&, ostream&); void display(colour, short); }; #endif 

L’errore è:

game.h:8 error: 'string' does not name a type
game.h:9 error: 'string' does not name a type

La tua dichiarazione d’ using trova in game.cpp , non in game.cpp , dove in realtà dichiari le variabili stringa. Hai intenzione di using namespace std; nell’intestazione, sopra le righe che usano la string , che consentirebbe a quelle linee di trovare il tipo di string definito nello spazio dei nomi std .

Come altri hanno sottolineato , questa non è una buona pratica nelle intestazioni – chiunque includa quell’intestazione colpirà involontariamente la linea che using e importerà std nel loro spazio dei nomi; la soluzione giusta è cambiare quelle linee per usare invece std::string

string non indica un tipo. La class nell’intestazione della string è chiamata std::string .

Si prega di non inserire using namespace std in un file di intestazione, esso inquina lo spazio dei nomi globale per tutti gli utenti di tale intestazione. Vedi anche “Perché è ‘usare namespace std;’ considerato una ctriggers pratica in C ++? ”

La tua class dovrebbe assomigliare a questa:

 #include  class Game { private: std::string white; std::string black; std::string title; public: Game(std::istream&, std::ostream&); void display(colour, short); }; 

Basta usare lo std:: qualificatore davanti alla string nei file di intestazione.

In effetti, dovresti usarlo anche per istream e ostream – e quindi avrai bisogno di #include nella parte superiore del tuo file di intestazione per renderlo più autonomo.

Prova a using namespace std; all’inizio di game.h o usa la std::string completa std::string invece di string .

Lo namespace in game.cpp è dopo l’inclusione dell’intestazione.