返回虚拟函数的静态成员,对于抽象类缺少VT

returning static member for virtual function, missing vtable for abstract class

本文关键字:抽象类 VT 虚拟 函数 静态成员 返回      更新时间:2023-10-16

在此处,在CPP中的新来者,可能会在此处进行愚蠢。

我在实现虚拟函数时试图返回静态属性。本期链接器错误,说该功能未实现。我迷失了这个问题。

我能够通过以下删除代码重现错误:

#include <iostream>
#include <map>
class Abstract1 {
public:
    virtual char* getFoo();
};
class Base: public Abstract1 {
public:
    char* getFoo() {
        return Base::mapper[1];
    }
    static std::map<int,char*> mapper;
};
std::map<int, char*> Base::mapper;
int main(int argc, const char * argv[]) {
    Base::mapper[0] = "Hello!n";
    Base::mapper[1] = "Goodbye!n";
    Base* hello = new Base();
    // insert code here...
    std::cout << hello->getFoo() << "n";
    return 0;
}

产生以下链接器错误:

Undefined symbols for architecture x86_64:
  "typeinfo for Abstract1", referenced from:
      typeinfo for Base in main.o
  "vtable for Abstract1", referenced from:
      Abstract1::Abstract1() in main.o

Abstract1::getFoo只是虚拟的,而不是抽象。

您可以使其抽象:virtual char * getFoo() = 0;或提供默认实现。