#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
答案 0 :(得分:88)
您的using
声明位于game.cpp
,而不是game.h
,您实际声明了字符串变量。您打算将using namespace std;
放入使用string
的行上方的标题中,这将使这些行找到string
命名空间中定义的std
类型。
作为others have pointed out,标头中为not good practice - 包含该标头的每个人也会不自觉地点击using
行并将std
导入其名称空间;正确的解决方案是将这些行更改为使用std::string
而不是
答案 1 :(得分:35)
string
没有命名类型。 string
标头中的类称为std::string
。
请不要将using namespace std
放入头文件中,它会污染该标头的所有用户的全局命名空间。另请参阅"Why is 'using namespace std;' considered a bad practice in 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);
};
答案 2 :(得分:6)
只需在头文件中使用std::
前面的string
限定符即可。
事实上,您应该将其用于istream
和ostream
- 然后您需要在头文件顶部使用#include <iostream>
以使其更加自包含。
答案 3 :(得分:5)
尝试using namespace std;
顶部的game.h
或使用完全限定的std::string
代替string
。
namespace
中的game.cpp
位于包含标题之后。
答案 4 :(得分:0)
您可以通过两种简单的方法来克服此错误
第一种方式
using namespace std;
include <string>
// then you can use string class the normal way
第二种方式
// after including the class string in your cpp file as follows
include <string>
/*Now when you are using a string class you have to put **std::** before you write
string as follows*/
std::string name; // a string declaration