我在某个类中将Vector vector c_<class A * >;
声明为私有。此向量保存指向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级,它没有在A级中被宣布,而是在A1级宣布。我看到的方式是c_.back
获取向量c_中的最后一个元素。这是一个指向A1类的指针,所以我用以下方法取消引用它: - &gt;并在指针指向(A1)的类中调用methode1()。但我得到一个错误,但我不知道它出错了。
答案 0 :(得分: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.
一般来说,如果你发现自己过于频繁地执行这些演员表,那不是一个好兆头。