自从我用C ++编码以来很长一段时间,遇到一些我无法解决的错误:
在该行中(查看代码段): list.push_back(形状)
错误:抽象类类型'Shape'的新表达式无效
但是我也有些困惑,因为我在编译日志中看到了更多的地方
注意:“虚拟布尔形状:: hit(const Ray&,float,float,hitRecord&)const” 虚拟布尔匹配(const Ray&ray,float tMin,float tMax,hitRecord&hit)const = 0;
我有这个抽象类:
#pragma once
#include "Ray.h"
struct hitRecord
{
float t;
Vec3 p;
Vec3 normal;
};
class Shape
{
public:
virtual bool hit(const Ray& ray, float tMin, float tMax, hitRecord& hit) const = 0;
};
然后是两个实现 hit 的子类:
#pragma once
#include "Shape.h"
class Sphere: public Shape
{
public:
Vec3 center{};
float radius{};
Sphere() = default;
virtual bool hit(const Ray& ray, float tMin, float tMax, hitRecord& hit) const
{
//Do stuff
return false;
}
};
并且:
#pragma once
#include "Shape.h"
#include <vector>
class ShapeList: public Shape
{
public:
std::vector<Shape> list;
ShapeList()
{
list = std::vector<Shape>();
};
virtual bool hit(const Ray& ray, float tMin, float tMax, hitRecord& hit) const
{
// Do Stuff
return hitAnything;
}
void append(Shape& shape)
{
list.push_back(shape);
}
};
最后在 main()中,我基本上在做
ShapeList world;
Sphere sphere();
world.append(sphere1);