【发布时间】:2018-10-14 20:23:10
【问题描述】:
我有一个 top API(基于抽象类),它由 base API 组成(将被不同的 top 重用API)。
class api_base {
public:
virtual int foo() = 0;
};
class api_top : public api_base {
public:
virtual int bar() = 0;
}
然后,我想为基础 API 提供一个基础实现:
class imp_base {
public:
int foo() { return 1; }
}
最后使用基本 API 中定义的函数的基本实现实现 top API:
class imp_top : public api_top, public imp_base {
public:
int bar() { return 1; }
}
当我实例化一个imp_top 类型的对象时,编译器说foo() 函数没有实现。但这不是真的,因为imp_top 派生自imp_base,它确实实现了foo() 函数。
对此有何建议?
提前谢谢你。
完整的测试代码:
#include <stdio.h>
class api_base {
public:
virtual int foo() = 0;
};
class api_top : public api_base {
public:
virtual int bar() = 0;
};
class imp_base {
public:
int foo() { printf("foo from imp_base\n"); }
};
class imp_top : public api_top, public imp_base {
public:
int bar() { printf("bar from imp_top\n"); }
};
int main()
{
printf("Hello\n");
imp_top a;
a.bar();
a.foo();
return 1;
}
编译结果:
test.cpp:26:12: error: cannot declare variable ‘a’ to be of abstract type ‘imp_top’
imp_top a;
^
test.cpp:18:7: note: because the following virtual functions are pure within ‘imp_top’:
class imp_top : public api_top, public imp_base {
^
test.cpp:5:17: note: virtual int api_base::foo()
virtual int foo() = 0;
^
test.cpp:29:6: error: request for member ‘foo’ is ambiguous
a.foo();
^
test.cpp:15:9: note: candidates are: int imp_base::foo()
int foo() { printf("foo from imp_base\n"); }
^
test.cpp:5:17: note: virtual int api_base::foo()
virtual int foo() = 0;
【问题讨论】:
-
api_top应该有一个foo()的实现 -
您使用的是哪个版本的 C++ 标准?
-
@RX_DID_RX 任何非 Java 的 C++ 版本!
标签: c++ inheritance abstract-class multiple-inheritance