我是C++初学者。我有一个singleton 'Manager‘类,如下所示,在Eclipse中构建该项目时会出现以下错误:
../src/Manager.hpp:28: undefined reference to 'vtable for Manager'
下面的代码是在dev环境或IDE中运行的最小(几乎)代码,如果您想要重现错误的话。
Manager.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;
};
Manager.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;
};
我已经尝试过的(但没有成功):
Manager::Manager(){};
错误:extra qualification 'Manager::' on member 'Manager'
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
)好吗?
发布于 2015-04-24 23:37:50
我看到了~Manager()
的声明,但没有看到定义。这需要在Manager.cpp中。
我相信您收到了这条晦涩的消息,因为vtable
保存着所有虚拟函数的地址。您只有一个虚拟函数,而且还没有定义它。
我无法重现vector
错误。一旦我将~Manager::Manager() { }
添加到Manager.cpp
中,我的版本就会编译得很好。
https://stackoverflow.com/questions/29859223
复制相似问题