C++指针向量中多态方法的问题
首先,最重要的是,我对我的英语不好感到抱歉,我不是英语母语=/
我有一个指向我的基类A的指针向量,它由类B和C填充。 B 和 C 是 A 的多态类,它们只多了一种方法:setTest()。 现在我想通过向量调用 B/C 中的方法:
vector (A*) vec;
vec.push_back(new classB());
vec.push_back(new classC());
for(int i=0;i<3;++i)
vec[i]->setTest(true);
但是编译器说我的基类 A 中没有方法 setTest() 。 我有什么想法可以解决这个问题吗?
first and foremost sorry for my bad english, I'm no english native =/
I have a vector of pointers directing at my base class A which is filled by classes B and C.
B and C are polymorphic classes from A, which have only one more method, setTest().
Now I want to call a method from B/C through the vector:
vector (A*) vec;
vec.push_back(new classB());
vec.push_back(new classC());
for(int i=0;i<3;++i)
vec[i]->setTest(true);
But the compiler says there is no method setTest() in my baseclass A.
Any ideas how I can fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于编译器“认为”处理 A,因此它无法推断出方法
setTest
存在。要解决这个问题,您可以执行以下操作:
将抽象方法添加到A:
更新
还有另一种方法。让我们仅使用一种方法创建辅助接口 D:
比使用多重继承更改 B 和 C 的签名:
最后让我们更改迭代:
简单的转换允许调用预期的方法。但!!!如果向量可以包含 A 的实例,那么它将失败,因此使用dynamic_cast 会有所帮助:
Since compiler "think" that deals with A, it cannot deduce that method
setTest
exists.To resolve this problem you can do following:
Add abstract method to A:
Update
There is another way. Let's create helper interface D with only one method:
Than using multiple inheritance change signature of B and C:
And at last let's change iteration:
Simple casting allows call expected method. BUT!!! if vector can contains instances of A than it will fail, so using dynamic_cast helps: