Почему я получаю строку, не называю тип Error? - программирование
Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Ваше объявление using находится в game.cpp, а не game.h, где вы фактически объявляете строковые переменные. Вы намеревались помещать using namespace std; в заголовок, над строками, использующими string, которые позволят этим линиям найти тип string, определенный в пространстве имен std.

В качестве других указали, это не хорошая практика в заголовках - все, кто включает в себя заголовок также невольно попадет в строку using и импортирует std в свое пространство имен; правильным решением является изменение этих строк для использования std::string вместо

Ответ 2

string не указывает тип. Класс в заголовке string называется std::string.

Пожалуйста, не поместите using namespace std в заголовочный файл, он загрязняет глобальное пространство имен для всех пользователей этого заголовка. См. Также "Почему" using namespace std;" считается плохой практикой в ​​С++?

Ваш класс должен выглядеть следующим образом:

#include <string>

class Game
{
    private:
        std::string white;
        std::string black;
        std::string title;
    public:
        Game(std::istream&, std::ostream&);
        void display(colour, short);
};

Ответ 3

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

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

Ответ 4

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

namespace в game.cpp после включения заголовка.