编译器一直说 'class A' 没有名为 'foo' 的成员。
我正在尝试将派生类中的函数与指针一起使用。这是我的代码:
class A{
.....
};
class B:public A{
virtual void foo() = 0;
};
class C:public B{
....
public:
void foo(){
....
}
};
我有一个名为 Table
的 A
指针表,在尝试时
Table[j]->foo()
我收到编译器错误。
除了cast我还应该做什么?
最佳答案
你有一个编译错误,因为函数 foo
没有在类 A
中声明。
你可以像这样在 A
中将其声明为纯虚拟:
class A {
virtual void foo() = 0;
};
在派生类中,您不必将 foo
显式声明为 virtual
。如果只有 C
是具体类,则根本不必在类 B
中声明 foo
。
如果您的示例知道在指向 A
的指针数组中只有类 C 的实例,您可以显式转换为指向 C
的指针,但它是一个设计不佳的标志,我不推荐它:
static_cast<C*>(Table[j])->foo()
关于c++使用来自基类的指针访问派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962263/