【发布时间】:2018-07-26 10:49:23
【问题描述】:
我正在尝试创建一个 particle 类,它能够产生其他粒子,但我自己却陷入了困境!
到目前为止,我创建了一个包含粒子向量的spawner 类。我认为particle 类需要能够“看到”产卵器才能将新粒子添加到这个向量,所以在particle 中我创建了一个指向这个产卵器的指针。然后我希望particle::spawn() 函数会创建一个新粒子并将其添加到向量中,但它会抛出一个错误(“线程 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)”)。
为什么这段代码不起作用?是否有一些我想念的更简单的方法来实现这一点?
注意 - 我实际上是使用 pointers 的向量指向 spawner 内的粒子,因为我最终想创建一个带有自己的 spawn() 的子类(例如 particle_sub1)和test() 可以通过多态访问的函数。
谢谢!
#include <iostream>
#include <random>
using namespace std;
// forward declare particle class
class particle;
// --------------------------------
// spawner class
class spawner {
public:
// vector of pointers to particles
vector<particle*> particle_ptr_vec;
spawner() {};
};
// --------------------------------
// particle class
class particle {
public:
// pointer back to spawner object
static spawner* spawner_ptr;
particle() {};
void set_ptr(spawner &x) {spawner_ptr = &x;}
virtual void spawn();
virtual void test() {cout << "pass test\n";}
};
// initialise static variable
spawner* particle::spawner_ptr;
// spawn new particle
void particle::spawn() {
particle x;
spawner_ptr->particle_ptr_vec.push_back(&x);
cout << "spawn particle\n";
}
// --------------------------------
// main funciton
int main(int argc, const char * argv[]) {
// create spawner
spawner s;
// create first particle and define pointer back to spawner
particle z;
s.particle_ptr_vec.push_back(&z);
s.particle_ptr_vec[0]->set_ptr(s);
// spawn new particle
s.particle_ptr_vec[0]->spawn();
// check that two particles exist
cout << "number of particles: " << s.particle_ptr_vec.size() << "\n";
// test that worked
s.particle_ptr_vec[0]->test(); // this test passes
s.particle_ptr_vec[1]->test(); // this test throws the error
}
【问题讨论】:
标签: c++ oop polymorphism