Почему я получаю строку не называет ошибку типа?


игры.cpp

#include <iostream>
#include <string>
#include <sstream>
#include "game.h"
#include "board.h"
#include "piece.h"

using namespace std;

игры.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

4 51

4 ответа:

код using декларации game.cpp, а не game.h где вы фактически объявляете строковые переменные. Вы намеревались поставить using namespace std; в заголовок, над строками, которые используют string, что позволит этим строкам найти 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);
};

просто использовать std:: квалификатор перед string в файлы заголовков.

в самом деле, вы должны использовать istream и ostream - и тогда вам понадобится #include <iostream> в верхней части файла заголовка, чтобы сделать его более самодостаточным.

попробовать using namespace std; в верхней части game.h или использовать полное std::string вместо string.

The namespace на game.cpp после того, как заголовок включен.