gpt4 book ai didi

c++ - 类不是抽象的,但我收到错误 C2259 : cannot instantiate abstract class

转载 作者:太空狗 更新时间:2023-10-29 19:58:55 30 4
gpt4 key购买 nike

我试图在 C++ 中实现策略模式,但出现以下错误:

错误 1 ​​error C2259: 'LinearRootSolver': 无法实例化抽象类

这是我的代码(错误所在的行标有注释)。使用策略模式(上下文)的类:

bool Isosurface::intersect(HitInfo& result, const Ray& ray, float tMin, float tMax) {
INumericalRootSolver *rootSolver = new LinearRootSolver(); // error here
[...]
}

这是我的策略模式类:

class INumericalRootSolver {
public:
virtual void findRoot(Vector3* P, float a, float b, Ray& ray) = 0;
};

class LinearRootSolver : public INumericalRootSolver {
public:
void findRoot(Vector3& P, float a, float b, Ray& ray) {
[...]
}
};

我不明白为什么在顶部的 intersect 方法中尝试实例化抽象类时出错?

最佳答案

 void findRoot(Vector3* P, float a, float b, Ray& ray) = 0;
//^^

void findRoot(Vector3& P, float a, float b, Ray& ray) 
//^^

参数类型不匹配,所以findRoot继承的基于表单的类仍然是一个纯虚函数(不是覆盖),这使得LinearRootSolver类成为一个抽象类。当你这样做时:

  INumericalRootSolver *rootSolver = new LinearRootSolver();

它试图创建一个抽象类的对象,你得到了编译器错误。

关于c++ - 类不是抽象的,但我收到错误 C2259 : cannot instantiate abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627979/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com