2017-01-24 1 views
0

Stellen habe ich eine Klasse A. B & C beide erben von A. B‘Erbt von B.C++ Kind-Funktion auf Vektor der Eltern rufen Objekte

B“ hat eine Membervariable, die einen Vektor von A Zeigern Ich erstelle ein neues B "genannt bP und speichere ein neues C innen, genannt c. Jetzt möchte ich c.f() aufrufen, eine Funktion, die nur für Typ C existiert. Ich rufe bP[0]->f(). Der Fehler, den ich bekomme, ist "f(): ist kein Mitglied von 'A'". Kann ich eine Child-Funktion aus einem Vektor von übergeordneten Objekten aufrufen?

+1

Bitte geben Sie ein [mcve]; Auf diese Weise müssen wir uns nicht vorstellen, wir können uns den tatsächlichen Code ansehen. –

+0

Wenn der Zeiger auf das untergeordnete Objekt zeigt, ja. Sie können einfach 'static_cast (bP [0]) -> f' tun. Aber versuchen Sie bitte, beim nächsten Mal etwas Code einzubinden, damit Sie besser verstehen, was Sie vorhaben. – George

+0

was ist B '' ?? Bitte geben Sie den Code an – instance

Antwort

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