Проблема с ошибкой: вызван чистый виртуальный метод - завершить вызов без активного исключения - Прервано - PullRequest
0 голосов
/ 19 марта 2020

Выражение чисто виртуальное с помощью метода 4. Lone - это подкласс Expression. В выражении есть только 4 чисто виртуальных метода, найденных в Lone, и конструктор и деструктор.

Expression::~Expression() {};
Expression::Expression() {
};

Lone::~Lone() {
        cout << "Destroy Lone" << endl;
};

Lone::Lone(int val) {
        this->val = val;
        cout << "create Lone" << endl;
};


string Lone::prettyprint() {
        ostringstream result;
        result << this->val;
        string ans = result.str();
        return ans;
};

void Lone::set(string var, int val) {
};

void Lone::unset(string var) {
};

int Lone::evaluate() {
        cout << "eval Lone" << endl;
        return this->val;
};

перегруженный оператор ввода

istream &operator>>(istream &in, Expression *&e) {
string s;
vector<Expression*> v;
  while (in >> s) {
    istringstream ss(s);
    int n;
    if (ss >> n) {
            Lone temp{n};
            Expression* exp{&temp};
            v.emplace_back(exp);
    } else if (s == "done") {
            e = v[0];
            break;
    }
  return in;
};

основная функция

int main () {
  string s;

  Expression *e;
  cin >> e;

  // Command interpreter
  while (cin >> s) {
    if (s == "eval") {
            e->evaluate();
    }
    else if (s == "set") {
            string name;
            int val;
            if (cin >> name >> val) {
                    (*e).set(name, val);
            }
    }
    else if (s == "unset") {
            string name;
            if (cin >> name) {
                    (*e).unset(name);
            }
    }
    else if (s == "print") {
           string result = e->prettyprint();
           cout << result;
    }
  }
};

I Я все еще учусь с ++. Он вызывает конструктор и деструктор по умолчанию, но он мне дал: вызывается чисто виртуальный метод - вызывается терминатор без активного исключения - прерывается, когда я вызываю fuction: 1 done (enter) и методуборта или prettyprint. Я думаю, что это может быть вызов чисто виртуального метода класса Expression, но я не могу понять, почему.

...