无法启动抽象类,因为成员是抽象的
Cannot initiate an abstract class because members are abstract
我是多态性的新手,这是一个与此类似的问题,但解决方案对我没有帮助。确切的错误是:
Circle.cpp(34):错误 C2259:"Circle":无法实例化抽象类 由于以下成员: 'void Shape::p article(const Ray &,const int&)' : 是抽象的
我试图阅读这个,我认为 clone() 成员函数调用 Circle 的复制构造函数将其状态复制到新创建的 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;
^
但仍然遇到同样的错误?
谢谢
virtual void particle(const Ray& ray, const int& count) const = 0;
^^^^^^
使其成为一种完全不同的方法。并且与以下不同:
virtual void particle(const Ray& ray, const int& count) = 0;
最终,你拥有的是派生类中的一个新方法,它是纯虚拟的,它不会覆盖基类纯虚拟方法。由于没有覆盖,它给你的派生类留下了一个继承的纯虚函数,它不实现,它也使你的派生类成为抽象类。
重写基类虚拟方法 您需要在基类中对方法具有完全相同的定义才能重写它(但允许使用协变量类型)。
相关文章:
- 助记符和指向成员语法的指针
- 类模板的成员功能的定义在单独的TU中完全专业化
- 数据成员SFINAE的C++17测试:gcc vs clang
- 保留对其他类的成员函数的引用
- 抽象类错误,请参阅声明" "是抽象的
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- C++ 字符串类擦除成员函数的时空复杂性
- 如何创建存储指向成员函数的指针的类 (C++)
- 如何将类成员方法的参数列表自动填充写入可变参数?
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- 在 C++ 中访问抽象类成员中的类
- 在抽象基类中与抽象类成员合作的最佳方法
- 无法启动抽象类,因为成员是抽象的
- 为什么这个没有声明任何纯虚成员函数的类是抽象的?
- 增强引用成员抽象类的序列化
- 抽象类型作为类成员变量的问题
- 将派生类成员函数的指针强制转换为抽象成员函数的指针