c++ - 如何解决 <<ClassName>> 的 "undefined reference to ` vtable 错误?

标签 c++ c++11 vector constructor vtable

我是一名 C++ 初学者。我有一个如下所示的单例“Manager”类,当我在 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

main.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::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() 的声明,但没有看到定义。这需要位于 Manager.cpp 中。

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

我无法重现 vector 错误。将 ~Manager::Manager() { } 添加到 Manager.cpp 后,我的版本就可以正常编译。

关于c++ - 如何解决 <<ClassName>> 的 "undefined reference to ` vtable 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859223/

相关文章:

c++ - 在单独的 C++ 线程中登录?

c++ - 解决 VC++12 中的模板特化错误?

c++ - 如何检测具有特定签名的静态成员函数的存在?

regex - R gsub 返回不正确的数据

c++ - 特定时间的 wxwidgets 事件

c++ - 我怎样才能摆脱这个 reinterpret_cast,或者这种用法可以吗?

具有两种类型参数的c++可变参数/可变参数函数

c++ - 在 C++11 中构建 union 元组

c++ - 数组中的 SIGABRT C++ 如何转向 <vector>

c++ - 将 vector 复制到剪贴板