Как исправить эту ошибку: C2280 "Token_stream::Token_stream(void)": предпринята попытка ссылки на удалённую функцию

Рейтинг: 0Ответов: 1Опубликовано: 26.05.2023
class Token
{
public:
    char kind;
    double value;
    string name;
    Token(char ch) :kind{ ch } { }
    Token(char ch, double val) :kind{ ch }, value{ val } { }
    Token(char ch, string n) :kind{ ch }, name{ n } { }
};

class Token_stream
{
public:
    Token get();
    void putback(Token t);
    void ignore(char c); // Отбрасывает символы до символа 'c' включительно.
private:
    bool full{ false };
    Token buffer;
};

Token_stream ts; // ТУТ ОШИБКА C2280 "Token_stream::Token_stream(void)": предпринята попытка ссылки на удалённую функцию
double expression(){ Token t = ts.get(); }

Ответы

▲ 2

У вас есть класс Token, у которого нет конструктора по умолчанию. А в конструкторе по умолчанию Token_stream, который генерируется компилятором, требуется вызов того самого отсутствующего конструктора Token...

Или допишите конструктор по умолчанию Token, или конструктор по умолчанию Token_stream, который использует один из имеющихся конструкторов Token...