如何解决C2259:“对象”无法实例化错误,我没有实例化任何“对象”对象?
我很确定我不是在创建一个纯粹的“对象”变量。我声明了一个由对象组成的向量,但我认为即使“对象”它是一个抽象类/结构,它也应该是合法的?
头文件:
#pragma once
#include <glm/glm.hpp>
#include "Collider.h"
#include "Renderer.h"
struct Object
{
public:
float mass = 10;
float Resititution = 0.7;
glm::vec2 velocity;
glm::vec2 force = glm::vec2(0,0);
bool isDynamic = true;
bool isKinematic = true;
Collider* collider;
Transform* transform;
virtual void submitToRenderer(Renderer* renderer) const = 0;
};
struct SphereObj : Object
{
void submitToRenderer(Renderer* renderer) const override;
};
struct PlaneObj : Object
{
void submitToRenderer(Renderer* renderer) const override;
};
cpp 文件:
#include "Object.h"
void SphereObj::submitToRenderer(Renderer* renderer) const
{
renderer->submitObject(this);
}
void PlaneObj::submitToRenderer(Renderer* renderer) const
{
renderer->submitObject(this);
}
在 main() 中
std::vector<Object> objList;
在另一个文件中:
std::vector<Object*> m_objects;
解决方法
std::vector
使用 new
运算符来分配它的对象。如果您有 std::vector<Object> objList
,则 std::vector
将为其分配对象。然而,Object
是一个抽象类,所以当 new
尝试分配和初始化这些对象时,它不会工作。
Object*
是一个不同的东西,因为它是一个指针,而不是抽象类本身。这会起作用,因为指针不是抽象类。
看看你的代码,我猜你正在使用 3D 引擎 [游戏引擎]。
所以,你应该像这样实例化你的对象:
Object* object = Instantiate<SphereObj>(...);
我假设您已经实现了 Insantiate 模板功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。