invalid new-expression of abstract class type 'CurveFittingEdge'



注:原創不易,轉載請務必注明原作者和出處,感謝支持!

一 報錯原因

今天遇到了一個之前從未遇到的報錯:
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 {}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM