0

我有一个非常简单的代码:

#include <iostream>
#include <string>

class A
{
    public :

            A(){}
            virtual void fun(std::string);
            virtual ~A(){}
};

class B : public A
{
    public :

            B(){}
            void fun(std::string);
            ~B(){};
};

void B::fun(std::string)
{

}

int main()
{
    A a;
    return 0;
}

我收到这条消息试图编译它:

/home/Temp/test.o||A::A()':| test.cpp:(.text._ZN1AC2Ev[_ZN1AC5Ev]+0x8)||undefined reference to 在A'的函数vtable中| /home/Temp/test.o||A::~A()':| test.cpp:(.text._ZN1AD2Ev[_ZN1AD5Ev]+0xb)||undefined reference to 在A'的函数vtable中| /home/Temp/test.o:(.rodata._ZTI1B[typeinfo for B]+0x8)||未定义对`typeinfo for A'的引用| ||=== 构建完成:3 个错误,0 个警告 ===|

这是为什么?

4

2 回答 2

4

你忘了执行A::fun

如果您不想实现虚函数,请将其标记为纯用= 0,但请注意该类将变为抽象类,您将无法实例化它。

于 2013-02-08T13:47:13.467 回答
2

使用以下命令实现A::fun或将其指示为纯虚拟= 0

virtual void fun(std::string) = 0;

仍然请记住,如果fun是纯虚拟的,您将无法A在 main 中实例化。

于 2013-02-08T13:48:20.393 回答