如何解决"未定义对'vtable for <>的引用<ClassName>"错误?
How do I resolve the "undefined reference to `vtable for <<ClassName>>" error?
我是一个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
,我的版本就可以很好地编译。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中