C++ 继承问题:使用类实例化的指针无法按预期工作
我得到了对“vtable for Base”的未定义引用的错误C++ 继承问题:使用类实例化的指针无法按预期工作,c++,C++,我得到了对“vtable for Base”的未定义引用的错误。我不知道这意味着什么,因为我没有使用任何所谓的“vtable”。另外,我也不太明白指针和新派生的是如何影响程序的。有人能澄清一下吗?谢谢 #include <iostream> using std::cout; class Base { // undefined reference to 'vtable for Base' public: void f(); virtual
。我不知道这意味着什么,因为我没有使用任何所谓的“vtable”。另外,我也不太明白指针和新派生的是如何影响程序的。有人能澄清一下吗?谢谢
#include <iostream>
using std::cout;
class Base { // undefined reference to 'vtable for Base'
public:
void f();
virtual void bar();
};
class Derived : public Base {
public:
void f();
void bar() {
cout << "I am bar";
}
};
int main() {
Derived d;
Base * b = &d;
b->bar();
}
#包括
使用std::cout;
类基类{//对“vtable for Base”的未定义引用
公众:
无效f();
虚空条();
};
派生类:公共基{
公众:
无效f();
空条(){
cout-bar();
}
为了编译,必须实现实例化类的virtual
函数。(或者将它们标记为纯virtual
)
只需在Base
中将条变为空:
virtual void bar() {}
或纯虚拟
(必须在派生类中重新实现才能实例化它们)
为了编译,您必须实现实例化类的virtual
函数。(或者将它们标记为纯virtual
)
只需在Base
中将条变为空:
virtual void bar() {}
或纯虚拟
(必须在派生类中重新实现才能实例化它们)
您有两个问题。首先,将Base
中的方法设置为纯虚拟:
class Base {
public:
virtual void f()=0;
virtual void bar()=0;
};
其次,您需要实现f()
:
您有两个问题。首先,将Base
中的方法设置为纯虚拟:
class Base {
public:
virtual void f()=0;
virtual void bar()=0;
};
其次,您需要实现f()
:
谢谢。这很有效。不过我有几个问题:继承时,如果执行class-Derived:Bar
,class-Derived-public-Bar
,class-Derived:protected-Bar
,以及class-Derived:private-Bar
,会发生什么情况?@user6607:1..2.在堆上分配对象。我建议你选择一个C++book@user6607要回答这些问题,请搜索stackoverflow,如果找不到答案,请提问。但一次只能问一个问题。谢谢。这很有效。不过我有几个问题:继承时,如果执行class-Derived:Bar
,class-Derived-public-Bar
,class-Derived:p会发生什么旋转条< /代码>和<代码>类派生:私有栏< /代码>。还有,<代码>新派生的< /COD>?do@ USer6607:1…2。在堆上分配对象。建议您选择C++。book@user6607要回答这些问题,请搜索stackoverflow,如果找不到答案,请提问。但一次只能问一个问题。