invalid new-expression of abstract class type 'CurveFittingEdge'

mac2022-06-30  17

目录

一 报错原因

注:原创不易,转载请务必注明原作者和出处,感谢支持!

一 报错原因

今天遇到了一个之前从未遇到的报错:error: invalid new-expression of abstract class type 'CurveFittingEdge'CurveFittingEdge *edge = new CurveFittingEdge(x_data[i])

下面的是有错误的代码片段:

class CurveFittingEdge : public g2o::BaseUnaryEdge<1, double, CurveFittingVertex> { public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW CurveFittingEdge(double x) : BaseUnaryEdge(), _x(x) {} // 计算曲线模型误差 void computeError() { const CurveFittingVertex *v = static_cast<const CurveFittingVertex *>(_vertices[0]); const Eigen::Vector3d abc = v->estimate(); _error(0, 0) = _measurement - std::exp(abc(0, 0) * _x * _x + abc(1, 0) * _x + abc(2, 0)); } virtual bool read(istream &in) {} virtual bool write(ostream &out) {} public: double _x; // x值,y值为_measurement };

报错情况如下图所示。

看到了吗?有一个虚函数virtual bool write(std::ostream &os) const = 0没有被实现,导致CurveFittingEdge仍然是一个abstract class type。

在上面的错误代码片段中,原意是想让虚函数read()和write()直接留空,但是出错的地方在于,在上述代码中write()函数后面少了一个const!,解决办法,将上面的错误代码片段中的write()改成如下形式即可:

virtual bool write(ostream &out) const {}

转载于:https://www.cnblogs.com/laizhenghong2012/p/11302657.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)