向向量添加抽象类时出错

时间:2019-05-16 15:50:03

标签: c++ abstract-class

自从我用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);

0 个答案:

没有答案