Bar*_*aro 7 c++ eclipse code-analysis eclipse-cdt virtual-inheritance
我有一个带有两个钻石的类层次结构,因为必须扩展装饰器模式中的所有类(它们已经虚拟扩展):
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());
}
图形:
       A
      /|\
   v /v| \ v
    /  |  \
AImpl  B  ADecorator
   |  / \  |
   | /   \ |
   |/     \|
BImpl     BDecorator
GCC编译没有问题,但是eclipse的代码分析坚持认为BDecorator没有实现foo()
The type '_sandbox::BDecorator' must implement the inherited pure virtual method '_sandbox::A::foo'
我可以通过在设置上将这种类型的错误设置为"Info"来解决这个问题,但是我想知道GCC忽略的代码中是否存在错误,或者我是否可以做些什么来使代码分析接受码?如果可能的话,我宁愿没有这个代码分析功能被静音,所以我可以很容易地发现实际的错误.
BImpl与BDecorator的不同之处在于它实现了什么方法?代码分析并没有抱怨BImpl,但是他们实现foo()的方式是类似的.