ich eine Klassenhierarchie mit zwei Diamanten haben, verursacht durch alle Klassen in einem Dekorateur Muster zu erweitern, die (sie erstrecken sich bereits praktisch):Code-Analyse des Eclipse CDT nicht versteht virtuelle Vererbung
namespace _sandbox {
class A {
public:
virtual ~A() {}
virtual void foo()=0;
};
class ADecorator : public virtual A {
private:
A* decoratedA;
public:
ADecorator(A* a) : decoratedA(a) {}
void foo() {return decoratedA->foo();}
};
class AImpl : public virtual A {
public:
void foo() {};
};
class B : public virtual A {
public:
virtual ~B() {}
virtual void bar()=0;
};
class BDecorator : public ADecorator, public B {
private:
B* decoratedB; //Copy of the pointer with a different type
public:
BDecorator(B* b) : ADecorator(b), decoratedB(b) {}
void bar() {return decoratedB->bar();}
};
class BImpl : public B, public AImpl {
public:
void bar() {};
};
B* b = new BDecorator(new BImpl());
}
Grafisch:
A
/|\
v /v| \ v
/| \
AImpl B ADecorator
|/\ |
|/ \ |
|/ \|
BImpl BDecorator
GCC kompiliert dies kein Problem, aber die Codeanalyse der Finsternis besteht darauf, dass BDecorator nicht implementiert foo()
The type '_sandbox::BDecorator' must implement the inherited pure virtual method '_sandbox::A::foo'
Ich kann dieses Problem zum Schweigen bringen, indem ich diese Art von Fehler in den Einstellungen auf "Info" setze, aber ich frage mich, ob es tatsächlich einen Fehler im Code gibt, den GCC übersehen hat oder ob ich etwas tun kann, um den Code zu erstellen Analyse akzeptieren Sie den Code? Wenn es möglich ist, möchte ich diese Codeanalysefunktion nicht zum Schweigen bringen, damit ich tatsächliche Fehler leicht erkennen kann.
Wie unterscheidet sich BImpl hinsichtlich der implementierten Methoden von BDecorator? Die Code-Analyse bekämpft nichts über BImpl, aber die Art, wie sie eine Implementierung von foo() haben, ist ähnlich.
Coole ASSCI Kunst, +1. – Maroun
es ist ASCII, Junge – hrkz
Ja, +1 für einen neuen Benutzer zu sein und die Frage ganz klar mit genug Code fragen, +1 für kühle ASCII Graphen. Die Frage selbst ist auch eine gute Frage. –