我想传递一个指向从抽象基类继承的类的指针,但是在下面(简化的)代码中得到一个EXC_BAD_ACCESS错误(当调用函数f()时)
class A {
double *pointer;
public:
A(double *p)
{
pointer = p;
};
virtual void f() = 0;
};
class B :public A{
double *pointer;
public:
B(double *p_) : A(p_){};
void f(){std::cout << pointer[0] << std::endl;};
};
如果我给它打电话,例如像这样
double p[2] = {1.,2.};
B b(p);
b.f();
如果基类不是抽象的,那么问题似乎不存在,但我无法弄清楚上面的代码有什么问题。任何帮助解决这个问题,并建议采用不同的方式来实现这种结构,非常感谢!
答案 0 :(得分:3)
问题是f()中的“pointer [0]”最终访问pointer
类的B
成员,而不是pointer
成员A
成员超级。
由于它没有初始化,在你的例子中,它是未定义的行为。
只需删除pointer
中B
的声明。