¿Por qué estoy recibiendo string no nombra un error de tipo?


Juego.cpp

#include <iostream>
#include <string>
#include <sstream>
#include "game.h"
#include "board.h"
#include "piece.h"

using namespace std;

Juego.h

#ifndef GAME_H
#define GAME_H
#include <string>

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

#endif

El error es:

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

Author: gsamaras, 2011-04-03

4 answers

Su declaración using está en game.cpp, no game.h donde realmente declara variables de cadena. Pretendió poner using namespace std; en el encabezado, por encima de las líneas que usan string, lo que permitiría que esas líneas encontraran el tipo string definido en el espacio de nombres std.

Como otros han señalado , esto es no es una buena práctica en los encabezados everyone todos los que incluyen ese encabezado también golpearán involuntariamente la línea using e importarán std en su espacio de nombres; la solución correcta es para cambiar esas líneas para usar std::string en su lugar

 80
Author: Michael Mrozek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:33

string no nombra un tipo. La clase en el encabezado string se llama std::string.

Please do not put using namespace std in a header file, it pollutes the global namespace for all users of that header. Véase también "¿Por qué 'usar el espacio de nombres std;' se considera una mala práctica en C++?"

Su clase debería tener este aspecto:

#include <string>

class Game
{
    private:
        std::string white;
        std::string black;
        std::string title;
    public:
        Game(std::istream&, std::ostream&);
        void display(colour, short);
};
 33
Author: Johnsyweb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:13

Simplemente use el calificador std:: delante de string en sus archivos de encabezado.

De hecho, debe usarlo para istream y ostream también, y luego necesitará #include <iostream> en la parte superior de su archivo de encabezado para que sea más autónomo.

 6
Author: quamrana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-03 07:36:25

Intente un using namespace std; en la parte superior de game.h o use el std::string completamente calificado en lugar de string.

El namespace en game.cpp está después de que se incluya el encabezado.

 3
Author: Borealid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-20 22:13:58