如何解决抽象类的多重继承导致模棱两可的定义
我正面临由该代码段引起的继承层次结构错误。 l()的定义是在Template类Y中定义的,我不明白为什么编译器会发现它是模棱两可的。类Z ptr_指向具有l()定义的类Y对象,这不是应该的方式。工作吗?
不幸的是,基类都是静态库的一部分,类C是我唯一能控制的东西。我不确定在这里可以做什么。
additionalData
Error:
Line 84: Char 13: error: non-static member 'l' found in multiple base-class subobjects of type 'D':
class C -> class A -> class D
class C -> class B -> class D
ptr_->l ()
Line 96: Char 15: note: in instantiation of member function 'Z<C>::~Z' requested here
Z < C > t = new Y < C > ();
^
Line 31: Char 16: note: member found by ambiguous name lookup
virtual void l () = 0;
解决方法
您的问题是您的继承层次结构如下所示:
//jest.config.js
module.exports = {
moduleFileExtensions: [
'js','jsx','json','vue'
],transform: {
'^.+\\.vue$': 'vue-jest','^.+\\.jsx?$': 'babel-jest'
},moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},snapshotSerializers: [
'jest-serializer-vue'
],setupFiles: [
"<rootDir>/src/utils/browser_mocks.js"
]
}
因此,当您通过 C
/ \
A B
| |
D D <- Defines l()
类型调用l()
时,编译器将不知道您是要调用C
还是C::A::D::l()
。
解决此问题的一种方法是指定您实际要在C::B::D::l()
类中使用哪个分支。
编译器在您的示例中抱怨,因为C
在l()
中是抽象的,但是,如果您的“真实”代码中不是这种情况,则可以解决这种歧义:
D
但是,如果class C : public A,public B {
public:
...
virtual void l() override { A::l(); } // Or B::l() if you prefer,of course
};
在l()
中是抽象的,而没有在D
或A
中实现,则可以在B
中进行此操作:
C
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。