gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:23 24 4
gpt4 key购买 nike

我是 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

主要.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com