2017-01-24 29 views
0

想象我有一个类A,B & C均从A,B继承”从B.C++调用子功能上父的矢量对象

乙继承”具有一个成员变量,其是A的指针的矢量 我创建了一个名为bP的新B,并在其中存储了一个新的C,名为c。 现在我想打电话给c.f(),这个函数只适用于C类型。 我打电话给bP[0]->f()。 我得到的错误是“f():不是'A'的成员”。 我可以从父对象的矢量调用子函数吗?

+1

请提供[mcve];这样我们不必“想象”,我们可以看看实际的代码。 –

+0

如果指针指向子对象,是的。你可以做'static_cast (bP [0]) - > f'。但是请下次尝试包含一些代码,这会让您更容易理解您正在尝试执行的操作。 – George

+0

什么是B''?请提供代码 – instance

回答

0
I believe your code structure is something like this : 

class A 
{ 
}; 

class B: public A 
{ 
}; 

class C: public A 
{ 
}; 

class B': public B 
{ 
    public: 
      vector<A*> vec; 
      B(class C* c) 
      { 
       vec.push_back(c); 
      } 
}; 

int main() 
{ 
    C *c = new C(); 
    B'* b = B'(c); 
    C* c = static_cast<C*>(((b->vec).front())->f()); //Downcasting 
    return; 
}