0

我有一个vector c_<class A * >;在某个类中声明为私有的 Vector。该向量包含指向 A 的子类的指针。例如:

some_class::func {
    c_.push_back (new A2);  // same as A1.
    c_.push_back (new A1);  //A1 is subclass : class A1 : public A;
    (c_.back()->methode1(); //returns a reference of A1's private member x_ for example 
}

我得到的错误是:在A类中没有定义这样
的方法。当然,它在A类中没有被清除,它在A1类中声明。我看到的方式是c_.back获取向量 c_ 中的最后一个元素。这是一个指向 A1 类的指针,因此我使用:-> 取消引用它,并在指针指向的类中调用 methode1() (A1)。但我得到一个错误,但我不知道哪里出错了。

4

1 回答 1

4

您只能A从指向的指针访问方法A。为了A1在 的元素上调用方法c_,您必须强制转换为A1,或重新考虑您的设计。

A1* a1 = dynamic_cast<A1*>(c_.back());
if (a1) a1->methode1();

矢量只是一种干扰。你有这个等价物:

A* a = new A1();
a->methode1();  // Error, A has no methode1()

A1* a1 = dynamic_cast<A1*>(a);
if (a1) a1->methode1(); // OK, call the method only if the cast succeeded.

一般来说,如果您发现自己过于频繁地执行这些演员表,这不是一个好兆头。

于 2013-11-07T14:54:52.837 回答