为什么我得到string不命名types错误?

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 

错误是:

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中你实际声明的stringvariables。 你打算把using namespace std; 进入头部,在使用string的行上面,这会让这些行find在std名字空间中定义的stringtypes。

正如其他人所指出的 ,这在头文件中不是很好的做法 – 每个包含头文件的人都会不由自主地using行,并将std导入其名称空间; 正确的解决scheme是改变这些行,而不是使用std::string

string不会命名一个types。 string头中的类被称为std::string

不要在头文件中using namespace 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:: qualifier即可。

实际上,你也应该把它用于istreamostream ,然后你需要在你的头文件的顶部包含#include <iostream> ,以使它更加独立。

尝试using namespace std;game.h的顶部或使用完全限定的std::string而不是string

game.cppnamespace是在包含头部之后。