#include <iostream>
#include <string>
#include <sstream>
#include "game.h"
#include "board.h"
#include "piece.h"
using namespace std;
#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
エラーは次のとおりです。
game.h:8 error: 'string' does not name a type
game.h:9 error: 'string' does not name a type
using
宣言は、実際に文字列変数を宣言するgame.cpp
ではなく、game.h
にあります。 string
を使用する行の上にあるヘッダーにusing namespace std;
を配置することで、string
名前空間で定義されているstd
型を見つけることができます。
他の人が指摘している のように、これは 良い習慣ではありません ヘッダーにあります-そのヘッダーを含むすべての人は、無意識にusing
行をヒットし、std
を名前空間にインポートします;適切な解決策は、代わりにstd::string
を使用するようにこれらの行を変更することです
string
はタイプに名前を付けません。 string
ヘッダーのクラスはstd::string
と呼ばれます。
しないヘッダーファイルにusing namespace std
を入力してください。ヘッダーファイルのすべてのユーザーのグローバル名前空間を汚染します。 「「ネームスペースstdを使用する理由」はC++で悪い習慣と見なされるのはなぜですか?」
クラスは次のようになります。
#include <string>
class Game
{
private:
std::string white;
std::string black;
std::string title;
public:
Game(std::istream&, std::ostream&);
void display(colour, short);
};
ヘッダーファイルのstring
の前にstd::
修飾子を使用するだけです。
実際、istream
およびostream
にも使用する必要があります。ヘッダーファイルの最上部に#include <iostream>
が必要です。
using namespace std;
の上部にあるgame.h
を試すか、string
の代わりに完全修飾std::string
を使用します。
game.cpp
のnamespace
は、ヘッダーが含まれた後です。