【发布时间】:2013-12-18 20:17:43
【问题描述】:
我有以下代码。
class A {
public:
virtual void foo() = 0;
}
class B : public A {
public:
void bar() { /* Do something */ }
}
void B::A::foo() {
bar();
// Do something else
}
当我尝试编译它时...我收到一条错误消息,说它找不到bar()。这不是实例化纯虚函数的正确方法吗?
use of undeclared identifier 'bar'
【问题讨论】:
-
A有一个注入类名(类似于 typedef)成员A,也就是说,A::A可以引用A本身。此成员在B中继承。因此,B::A指的是A。当然,在void A::foo()的范围内,没有成员bar。 -
您必须将 void foo() 添加到您的 B 类声明中。正如已经提到的一个答案 B::A::foo() 没有意义
标签: c++ inheritance c++11 virtual-functions clang++