C는

2017-01-24 1 views
0

내가 클래스 A에 B & C 모두 A를 B에서 상속 'B.C는

B로부터 상속 "A 포인터의 벡터는 멤버 변수를 가지고이 상상 객체 나는 이라고 불리는 bP이라는 새 B를 만들고 내부에 새로운 C를 저장합니다. 이제 C 유형에만 존재하는 함수 c.f()을 호출하려고합니다. 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; 
}