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.