j'aimerais bien faire un truc un peu special, que je decris dans ce petit bout de code. Oui oui je sais que deux instances de A sont créées dans la création de C, c'est bien ce que je veux

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
#include <iostream>
 
using namespace std;
 
class A {
public:
  A() {
    cout << "A created" << endl;
  }
 
  virtual void method() = 0;
};
 
class B : public A {
public:
  void method() {
    cout << "method B" << endl;
  }
};
 
class C : public B, public A {
public:
  void method() { // la je veux redefinir A::method()
    cout << "method C" << endl;
  }
};
 
void func(A & a) {
  a.method();
}
 
int main() {
  C c;
  func(c);
}

mais le compilo il veut pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
inheritance.cpp:21: warning: direct base `A' inaccessible in `C' due to 
   ambiguity
inheritance.cpp: In function `int main()':
inheritance.cpp:34: error: `A' is an ambiguous base of `C'

bon vous avez compris ce que je veux faire

Vous me direz que ce n'est pas propre mais je ne vois pas le problème de conception moi, dans C il suffirait de spécifierA:: ou B::A:: pour avoir un accès non ambigus a tous les membres...
qu'est ce que vous en dites ? comment résoudre ce "problème" ?