web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois une chaîne qui ne nomme pas un type Erreur?

game.cpp

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

using namespace std;

game.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

L'erreur est:

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

63
Steven

Votre déclaration using est dans game.cpp, ne pas game.h où vous déclarez réellement des variables de chaîne. Vous aviez l'intention de mettre using namespace std; dans l'en-tête, au-dessus des lignes utilisant string, ce qui permettrait à ces lignes de trouver le type string défini dans l'espace de noms std.

Comme d'autres l'ont déjà souligné , c'est ce n'est pas une bonne pratique dans les en-têtes - tous ceux qui incluent cet en-tête vont aussi involontairement cliquer sur la ligne using et importer std dans leur espace de noms; la bonne solution est de changer ces lignes pour utiliser std::string au lieu

91
Michael Mrozek

string ne nomme pas un type. La classe dans l'en-tête string s'appelle std::string.

S'il vous plaît ne pas mettre using namespace std dans un fichier d'en-tête, il pollue l'espace de noms global pour tous les utilisateurs de cet en-tête. Voir aussi "Pourquoi" utiliser l'espace de noms std; "est-il considéré comme une mauvaise pratique en C++?"

Votre classe devrait ressembler à ceci:

#include <string>

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

Il suffit d'utiliser le std:: qualificatif devant string dans vos fichiers d’en-tête.

En fait, vous devriez l’utiliser pour istream et ostream également - et vous aurez alors besoin de #include <iostream> en haut de votre fichier d’en-tête pour le rendre plus autonome.

6
quamrana

Essayez un using namespace std; Au sommet de game.h _ ou utilisez le _ pleinement qualifié std::string au lieu de string.

Le namespace dans game.cpp est après que l'en-tête est inclus.

5
Borealid