2

我有以下代码:-

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

这给了我一个错误说:-

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]

关于如何解决这个问题的任何想法?

4

1 回答 1

7
class D : public A<B>,
          public A<C> {
  public:
    using A<B>::f;  // <=== use
    using A<C>::f;  // <=== this

标准中使用冗长的语言对其进行了详细说明,但简单的规则是:所有成员函数重载必须来自同一个类。

于 2012-07-11T20:06:17.240 回答