C++尝试声明struct的基础,然后在以后初始化为派生结构

use*_*857 -3 c++

到目前为止我所拥有的:

enum type {
  type0,
  type1,
  type2
};

struct Base {
  type t;

  Base () {}
};

struct Derived : Base {
  vector<int> mem;

  Derived () {
    t = type0;
  } 
};

int main()  {
  Base s;
    switch(...) {
    case ... :
      s = Derived()
      for (...) {
        s.mem.push_back(num) // error: 'struct Base' has no member named 'mem'
      }
      break;
    ...
    } 

  // do some more stuff with s

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

做我想做的最好的方法是什么?我想从一个通用结构开始,并在我弄清楚类型后将其更改为更具体.

Dia*_*cus 5

首先,将派生对象分配给基础对象是不明智的.派生对象占用更多空间,并且当Base s确定空间时,该空间根本不存在,因此这些成员被切掉.你应该使用指针代替.

第二,用派生指针设置对象,然后在最后将指针值赋给基指针:

Base* s;
//...

Derived* d = new Derived();
// Do whatever you like with d
s = d;

// Delete the object eventually
delete s;
Run Code Online (Sandbox Code Playgroud)

另外,制作Base虚拟的析构函数.这确保了Derived在调用时也会调用析构函数delete s.