c++ - eclipse cdt的代码分析不懂虚继承

标签 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'

我可以通过在设置中将此类错误设置为“信息”来解决这个问题,但我想知道代码中是否确实存在 GCC 忽略的错误,或者我是否可以做些什么来制作代码分析接受代码?如果可能的话,我宁愿不关闭此代码分析功能,这样我就可以轻松检测到实际错误。

BImpl 与 BDecorator 在实现的方法方面有何不同?代码分析没有对 BImpl 有任何提示,但它们实现 foo() 的方式是相似的。

最佳答案

我认为您可能需要重新索引您的代码。在项目资源管理器中右键单击您的项目,单击索引,然后单击刷新所有文件。这将强制 Eclipse 索引您的所有代码。

关于c++ - eclipse cdt的代码分析不懂虚继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378690/

相关文章:

version-control - 查找和衡量修改最多的代码的工具?

c++ - Win32——对象清理和全局变量

java - 如何使用 Eclipse 中包含的外部库创建 jar?

Java 在启动新线程之前自动等待线程完成

eclipse - 如何使用 maven 在 spring mvc 项目中导入外部 *.jar?

Java EE Web 应用程序性能调优

C++ - 使用 DirectX11 进行光线转换

c++ - 使用构造函数初始化字符串指针

c++ - 我可以使用我称之为 "Raw OpenGL"的东西吗?

c# - 有没有办法在 Roslyn 的分析器和代码修复提供者之间传递数据(除了通过属性包)?