遍历抽象向量 类

Iterating through vector of abstract classes

已经有一个类似的问题,但是没有回答我的问题所以我再问一次。

我有这个 classes:

#ifndef _OBJECTS_H
#define _OBJECTS_H

#include "ray.h"
#include <cmath>

class Object {
    public:
        Vector3 position, color;
        Object(Vector3 position, Vector3 color): position(position), color(color){};

        virtual bool intersects() = 0;
};

class Sphere : public Object {
    public:
        float radius;
        Sphere(Vector3 center, float radius, Vector3 color): Object(center, color), radius(radius){};

        using Object::intersects;
        bool intersects(const Ray& ray, float& t);
};

#endif

我需要 std::vector 个对象并遍历它:

for(Object s:objects) {
                float t;
                if (s.intersects(ray, t)) {
                    //do something
                }
            }

当我将 intersects() 声明为 pure virtual 时,它告诉我无法遍历虚拟 class,如果我仅将其声明为 virtual,则它告诉我相交没有实现。我做错了什么?

因为(根据定义)你不能创建抽象 classes 的实例,std::vector<> 不能包含抽象 [=] 的 实例 17=]es。您需要更改容器以包含 pointers。那么指针类型可以是一个指向抽象的指针class.