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”)。如果无法更改名称(第三方类),引入另一层继承,它只是一个重命名垫片。