C++ 未定义对“虚拟类的 vtable ”的引用
c++ undefined reference to `vtable with virtual classes
我读到的解决这个问题的每个建议都说要为解构函数创建一个主体,但是,我提供了自己的解构函数。 我的问题是,我在单独的命名空间中有类,我使用一个纯虚拟类作为另一个类的基类。 只有当我使用指向 MyScene 变量的指针时,程序才会编译。 我需要传递对引擎的引用::引擎::运行(),否则我得到一个分段错误。
------基类------
#ifndef SCENE_H
#define SCENE_H
namespace Engine {
namespace Renderer {
class Scene
{
public:
virtual void create() = 0;
virtual void destroy() = 0;
virtual void update(double delta) = 0;
protected:
private:
};
} /* namespace Core */
} /* namespace Engine */
#endif // SCENE_H
----- 我的场景-----
#ifndef MYSCENE_H_
#define MYSCENE_H_
#include "../Engine/Renderer/Scene.h"
namespace Game{
class MyScene : public ::Engine::Renderer::Scene {
public:
void create();
void update(double delta);
void destroy();
};
}
#endif /* MYSCENE_H_ */
-----我的场景.cpp-----
#include "MyScene.h"
#include <iostream>
namespace Game {
void create()
{
std::cout << "Scene Created!" << std::endl;
}
void destroy()
{
std::cout << "Scene Destroyed!" << std::endl;
}
void update()
{
std::cout << "Scene Updated!" << std::endl;
}
} /* namespace Game */
-----主要功能-------
#include "Engine/Engine.h"
#include "Game/MyScene.h"
int main() {
Engine::Renderer::Window window(720, 640, false, "Test");
Game::MyScene scene;
return Engine::Engine::run(window, &scene);
}
您尚未提供要重写的函数的定义。例如,您需要添加:
void MyScene::create()
{
std::cout << "Scene Created!" << std::endl;
}
对所有成员函数执行此操作。
您编写void create()
不属于任何类,并且是命名空间中的非成员函数Game
。
您收到错误的原因是以下定义:
void create() {}
您应该在类范围内使用它,例如:-
void MyScene::create() {}
请确保为所有成员功能执行此操作。
随着更新的更改定义以接受参数。
从抽象类派生类时,抽象类的所有抽象方法都应在派生类中定义。你甚至没有定义一个方法。在类外部定义时,请使用类作用域来定义方法,并确保已重写基类中抽象的所有方法。
不要忘记,它是 void update(双增量); 不是简单的 void update();
相关文章:
- C++继承的虚拟类的内存布局
- C++ 如何从虚拟类的模板化子类中获取数据?
- ASAN 检测与动态加载库共享的类的 vtable 的 ODR 违规
- 为什么虚拟类的析构函数不会自动添加到 vtable 中?
- C++11 纯虚拟类的朋友无法访问私有方法
- 创建指向纯虚拟类的新指针
- 如何在LLDB中查看C++类的vtable
- c++将对纯虚拟类的引用存储为类的成员
- 获取没有对象的类的 vtable
- 使用虚拟类的运算符<<
- 指向虚拟类的指针
- 对派生类的"vtable"的未定义引用
- 我们可以访问纯虚拟类的静态成员变量吗?
- 虚拟函数的Vtable如何工作
- C++ 未定义对“虚拟类的 vtable ”的引用
- 在纯虚拟类的析构函数中等待线程死亡会导致运行时错误
- 如何通过GCC显示C++类的VTABLE
- 有没有办法调用纯虚拟类的"deleting destructor"?
- 虚拟类的向量:指针是干净的方法吗
- c++11中虚拟类的另一种构造方法