C++;Visual Studio 2010的多重继承解决方案问题导致C2509错误 我试图在非托管C++中实现类似C语言的显式接口实现。只要函数实现是类定义的一部分,我就可以这样做,但我不知道如何让它与源文件中的函数实现一起工作

C++;Visual Studio 2010的多重继承解决方案问题导致C2509错误 我试图在非托管C++中实现类似C语言的显式接口实现。只要函数实现是类定义的一部分,我就可以这样做,但我不知道如何让它与源文件中的函数实现一起工作,c++,visual-studio-2010,multiple-inheritance,C++,Visual Studio 2010,Multiple Inheritance,以下是我的测试代码: class Base { public: virtual void Func() = 0; void CallFunc() { Func(); } }; class Base1 : public Base { public: virtual void Func() = 0; }; class Base2 : public Base { public: virtual void

以下是我的测试代码:

class Base
{
public:

    virtual void    Func() = 0;

    void    CallFunc()
    {
        Func();
    }
};

class Base1 : public Base
{
public:

    virtual void    Func() = 0;
};

class Base2 : public Base
{
public:

    virtual void    Func() = 0;
};

// This Works

class Multi : public Base1, public Base2
{
public:

    virtual void    Base1::Func()
    {
        puts("Base1::Func()");
    }

    virtual void    Base2::Func()
    {
        puts("Base2::Func()");
    }
};


// This does not

//  1>multipeinheritancetest.cpp(60): error C2509: 'Func' : member function not declared in 'Multi'
//  1>          multipeinheritancetest.cpp(51) : see declaration of 'Multi'
//  1>multipeinheritancetest.cpp(65): error C2509: 'Func' : member function not declared in 'Multi'
//  1>          multipeinheritancetest.cpp(51) : see declaration of 'Multi'
/*
class Multi : public Base1, public Base2
{
public:

    virtual void    Base1::Func();
    virtual void    Base2::Func();
};

void Multi::Base1::Func()
{
    puts("Base1::Func()");
}

void Multi::Base2::Func()
{
    puts("Base2::Func()");
}
*/

// This is a work-around for when I don't want to declare the full function in the header
/*
class Multi : public Base1, public Base2
{
public:

    virtual void    Base1::Func() { Base1_Func(); }
    virtual void    Base2::Func() { Base2_Func(); }

    void    Base1_Func();
    void    Base2_Func();
};

void Multi::Base1_Func()
{
    puts("Base1_Func()");
}

void Multi::Base2_Func()
{
    puts("Base2_Func()");
}
*/

void RunMultiTest()
{
    Multi m;
    m.Base1::CallFunc();
    m.Base2::CallFunc();
}

有没有办法做到这一点,我的语法是关闭的还是这是VisualStudio bug,还是这是不可能的C++?

< p> <代码> Base1::Func在你的“Works'”案例中也不成立,它只是被编译器接受。 如果你想要两个不同的函数,就给它们取两个不同的名字。如果需要一个函数,请使用虚拟继承:

编辑:从注释修复
classbase1:公共虚拟基
classbase2:公共虚拟基


然后从函数重写中删除基本限定。

问题是如何在类之外定义
Base1::Func
。工作示例在类内使用内联代码。如果虚拟继承是所需的解决方案,则virtual关键字属于Base1和Base2(即“class Base1:public virtual Base”和“class Base2:public virtual Base”)。如果无法更改名称(第三方类),引入另一层继承,它只是一个重命名垫片。