Why am I getting string does not name a type Error?
Solution 1:
Your using
declaration is in game.cpp
, not game.h
where you actually declare string variables. You intended to put using namespace std;
into the header, above the lines that use string
, which would let those lines find the string
type defined in the std
namespace.
As others have pointed out, this is not good practice in headers -- everyone who includes that header will also involuntarily hit the using
line and import std
into their namespace; the right solution is to change those lines to use std::string
instead
Solution 2:
string
does not name a type. The class in the string
header is called std::string
.
Please do not put using namespace std
in a header file, it pollutes the global namespace for all users of that header. See also "Why is 'using namespace std;' considered a bad practice in C++?"
Your class should look like this:
#include <string>
class Game
{
private:
std::string white;
std::string black;
std::string title;
public:
Game(std::istream&, std::ostream&);
void display(colour, short);
};
Solution 3:
Just use the std::
qualifier in front of string
in your header files.
In fact, you should use it for istream
and ostream
also - and then you will need #include <iostream>
at the top of your header file to make it more self contained.