如何解决"未定义对'vtable for <>的引用<ClassName>"错误?

How do I resolve the "undefined reference to `vtable for <<ClassName>>" error?

本文关键字:lt gt for 错误 ClassName 引用 vtable 何解决 解决 未定义      更新时间:2023-10-16

我是一个C++初学者。我有一个如下所示的单例"管理器"类,当我在 Eclipse 中构建项目时出现以下错误:

../src/Manager.hpp:28: undefined reference to 'vtable for Manager'

[如果要尝试重现错误,下面的代码是在开发环境或 IDE 中运行的最低(几乎)代码。

经理.hpp

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include "stream_state.h"

class Manager {
    public:
       static Manager* getInstance();
       std::vector<stream_state> m_stateList;      // Why can I not remove std::?
       virtual ~Manager();      // Virtual destructor
    private:
       Manager(){};                               // ERROR points here - why so?
       Manager(Manager const&){};
       static Manager* pSingleton;
};

经理.cpp

#include "Manager.hpp"
Manager* Manager::pSingleton = 0;
Manager* Manager::getInstance()
{
    if (pSingleton == NULL){
        pSingleton = new Manager;
    }
    return pSingleton;
}
// Other member function implementations

主.cpp

#include <iostream>
#include <stdlib.h>
#include "Manager.hpp"
int main(int argc, char** argv)
{
    Manager* managerObj;
    managerObj = Manager::getInstance();
    // some other code
    return 0;
}

stream_state.h

struct stream_state
{
   FILE* sp;
   bool locked;
};

我已经尝试过(但没有奏效):
1. 我将管理器类的构造函数更改为:
Manager::Manager(){};错误:
extra qualification 'Manager::' on member 'Manager'
2. 我从行中删除了std:: std::vector<stream_state> m_stateList; vector<stream_state> m_stateList;错误: vector does not name a type

有人可以解释一下undefined reference to 'vtable for Manager'错误(如果可能但没有必要,vector does not name a type error)?

我看到了~Manager()的声明,但没有看到定义。这需要在管理器.cpp中。

我相信您会收到这个晦涩的消息,因为vtable保存所有虚拟函数的地址。你只有一个虚函数,你还没有定义它。

我无法重现vector错误。一旦我~Manager::Manager() { }添加到Manager.cpp,我的版本就可以很好地编译。