为什么我得到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
名字空间中定义的string
types。
正如其他人所指出的 ,这在头文件中不是很好的做法 – 每个包含头文件的人都会不由自主地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即可。
实际上,你也应该把它用于istream
和ostream
,然后你需要在你的头文件的顶部包含#include <iostream>
,以使它更加独立。
尝试using namespace std;
在game.h
的顶部或使用完全限定的std::string
而不是string
。
game.cpp
的namespace
是在包含头部之后。