【发布时间】:2012-05-31 10:49:14
【问题描述】:
我是多态的新手,这是一个与this 类似的问题,但解决方案对我没有帮助。 确切的错误是:
Circle.cpp(34) : 错误 C2259: 'Circle' : 无法实例化抽象类 由于以下成员: 'void Shape::particle(const Ray &,const int&)' : 是抽象的
我已尝试阅读此内容,我认为 clone() 成员函数调用 Circle 的复制构造函数将 this 的状态复制到新创建的 Circle 对象中并尝试初始化“粒子”(它做不到)。 如果我是对的:我该如何纠正? 如果我错了......它在做什么(我做错了什么)以及如何纠正它。
class Shape {
public:
virtual void particle(const Ray& ray, const int& count) = 0;
...
virtual Shape* clone() const = 0;
private:
vector<Ray> incoming_ray;
vector<int> counts;
};
class Circle : public Shape {
public:
Circle* clone() const; //covariant return type
virtual void
particle(const Ray& ray, const int& count);
...
};
然后
Circle* Circle::clone() const { return new Circle(*this); }
void
Circle::particle(const Ray& rays, const int& count){
incoming_ray.push_back(inc_ray);
counts.push_back(counts);};
我试过了
virtual void particle(const Ray& ray, const int& count) const = 0;
^
但还是出现同样的错误?
谢谢
【问题讨论】:
-
我只是试图编译你的代码,但我没有收到错误...它真的与导致你的问题的代码完全相同吗?