如何解决 "undefined reference to `vtable for <<ClassName>>" 错误?
How do I resolve the "undefined reference to `vtable for <<ClassName>>" error?
我是 C++ 初学者。我有一个单例 'Manager' class 如下所示,当我在 Eclipse 中构建项目时出现以下错误:
../src/Manager.hpp:28: undefined reference to 'vtable for Manager'
[如果您想尝试重现错误,下面的代码是在您的开发环境或 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;
};
我已经尝试过(但没有奏效)的方法:
1. 我将 Manager class 的构造函数更改为:
Manager::Manager(){};
错误:
extra qualification 'Manager::' on member 'Manager'
2. 我从行 std::vector<stream_state> m_stateList;
中删除了 std::
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++ 初学者。我有一个单例 'Manager' class 如下所示,当我在 Eclipse 中构建项目时出现以下错误:
../src/Manager.hpp:28: undefined reference to 'vtable for Manager'
[如果您想尝试重现错误,下面的代码是在您的开发环境或 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;
};
我已经尝试过(但没有奏效)的方法:
1. 我将 Manager class 的构造函数更改为:
Manager::Manager(){};
错误:
extra qualification 'Manager::' on member 'Manager'
2. 我从行 std::vector<stream_state> m_stateList;
中删除了 std::
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
,我的版本就可以正常编译了。