Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 继承问题:使用类实例化的指针无法按预期工作_C++ - Fatal编程技术网

C++ 继承问题:使用类实例化的指针无法按预期工作

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 for Base”的未定义引用的错误
。我不知道这意味着什么,因为我没有使用任何所谓的“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,如果找不到答案,请提问。但一次只能问一个问题。