관리되지 않는 C++에서 C# 명시 적 인터페이스 구현과 같은 작업을 수행하려고합니다. 함수 구현이 클래스 정의의 일부인 한 그렇게 할 수 있지만 소스 파일의 함수 구현과 함께 작동시키는 방법을 알 수는 없습니다.Visual Studio 2010에서 C++ 다중 상속 문제가 발생하여 C2509 오류가 발생합니다.
여기 내 테스트 코드입니다 :
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();
}
이 할 수있는 방법이 있나요 내 구문은 꺼져 있거나이 비주얼 스튜디오 버그 또는이 C와 단지 수 없습니다 ++?
문제는 클래스 외부에서'Base1 :: Func'을 정의하는 방법입니다. 작업 예제는 클래스 내부에서 인라인 코드를 사용합니다. –