C++ 复杂继承情况下的模糊函数调用
我有以下代码:-C++ 复杂继承情况下的模糊函数调用,c++,inheritance,ambiguous,C++,Inheritance,Ambiguous,我有以下代码:- #include <iostream> #include <vector> using namespace std; template <typename I> class A { public: void f (I* i) { lis.push_back(i); } vector <I*> lis; }; class B { public: int b; }; clas
#include <iostream>
#include <vector>
using namespace std;
template <typename I>
class A {
public:
void f (I* i) {
lis.push_back(i);
}
vector <I*> lis;
};
class B {
public:
int b;
};
class C {
public:
double c;
};
class D : public A<B>,
public A<C> {
public:
void g () {
cout<<"g\n";
}
};
class E : public B, public C {
public:
float e;
};
int main() {
E* e;
D d;
B* b = (B*) e;
d.f (b);
}
#包括
#包括
使用名称空间std;
模板
甲级{
公众:
无效f(I*I){
lis.推回(i);
}
病媒lis;
};
B类{
公众:
int b;
};
C类{
公众:
双c;
};
D类:公共A,
公共的{
公众:
空g(){
D类:公共A,
公共的{
公众:
使用A::f;//我认为如果b
实际上是Ab*
而不是铸造的E*
,歧义就会消失。你可能有一个(好的?)需要E
类的原因,尽管如此。仅供参考,您可以用一个更简单的测试用例引发这个问题;请参阅。@jpm是的,需要E有一个很好的原因。基本上,B&C是接口。@OliCharlesworth确实更简单。感谢您指出。您不清楚要实现什么。请描述如果情况更好,我们将能够更好地帮助您。
ambig.cpp: In function ‘int main()’:
ambig.cpp:42:5: error: request for member ‘f’ is ambiguous
ambig.cpp:9:10: error: candidates are: void A<I>::f(I*) [with I = C]
ambig.cpp:9:10: error: void A<I>::f(I*) [with I = B]
class D : public A<B>,
public A<C> {
public:
using A<B>::f; // <=== use
using A<C>::f; // <=== this