2017-01-24 32 views
0

は、私はクラスAのBを持っている想像し& Cオブジェクトの両方の「A. Bから継承B.C++コール子機能が

から継承

B」ポインタのベクトルであるメンバ変数を持っています 私はbPと呼ばれる新しいBを作成し、cと呼ばれる新しいCを内部に格納します。 c.f()は、タイプCにしか存在しない関数です。 私はbP[0]->f()と呼んでいます。 私が得るエラーは "f(): 'のメンバーではありません"。 親オブジェクトのベクトルから子関数を呼び出すことはできますか?

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