错误问题:调用了纯虚拟方法-在没有活动异常的情况下终止调用-已终止

时间:2020-03-19 05:23:30

标签: class pure-virtual

使用4方法表达是纯虚拟的。 Lone是Expression的子类。 Expression仅具有Lone中的4种纯虚拟方法以及构造函数和析构函数。

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;
    }
  }
};

我还在学习c ++。 它正在调用默认的构造函数和析构函数,但是给了我:调用纯虚拟方法-在没有活动异常的情况下终止调用-在我调用功能时中止:1 done(enter)并求值或prettyprint方法。 我认为它可能正在调用Expression类的纯虚拟方法,但我不知道为什么。

0 个答案:

没有答案
相关问题