Pourquoi est-ce que string ne nomme pas une erreur de type?
le jeu.cpp
#include <iostream>
#include <string>
#include <sstream>
#include "game.h"
#include "board.h"
#include "piece.h"
using namespace std;
le jeu.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
4 réponses
votre déclaration using
est dans game.cpp
, pas game.h
où vous déclarez réellement des variables de chaîne. Vous avez l'intention de mettre using namespace std;
dans l'en-tête, au-dessus des lignes qui utilisent string
, qui laisserait ces lignes trouver le type string
défini dans l'espace de nom std
.
comme d'autres ont souligné , c'est pas bonne pratique dans les en-têtes -- tous ceux qui comprennent que en-tête va aussi involontairement frapper la ligne using
et importer std
dans leur espace de nom; la bonne solution est de changer ces lignes à utiliser std::string
à la place
string
ne désigne 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 namespace std;' 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);
};
utilisez simplement le qualificatif std::
devant string
dans vos fichiers d'en-tête.
En fait, vous devriez l'utiliser pour istream
et ostream
- et alors vous aurez besoin de #include <iostream>
en haut de votre fichier d'en-tête afin de le rendre plus autonome.
essayez un using namespace std;
au haut de game.h
ou utilisez le std::string
au lieu de string
.
Le namespace
dans game.cpp
est après l'en-tête est inclus.