出现错误cannot allocate an object of abstract type“ ” 纯虚函数

本文讲解了在基类中声明的虚函数如何在派生类中进行正确的继承和实现,确保派生类对象创建时避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在基类中申明的虚函数,在派生类中必须继承并实现。在new一个派生类时才不会报该错误。


将基类中所有虚函数,在派生类中都要继承、实现。

bool PinholeCamera::Parameters::readFromYamlFile(const std::string& filename) { cv::FileStorage fs(filename, cv::FileStorage::READ); if (!fs.isOpened()) { return false; } if (!fs["model_type"].isNone()) { std::string sModelType; fs["model_type"] >> sModelType; if (sModelType.compare("PINHOLE") != 0) { return false; } } m_modelType = PINHOLE; fs["camera_name"] >> m_cameraName; m_imageWidth = static_cast<int>(fs["image_width"]); m_imageHeight = static_cast<int>(fs["image_height"]); cv::FileNode n = fs["distortion_parameters"]; m_k1 = static_cast<double>(n["k1"]); m_k2 = static_cast<double>(n["k2"]); m_p1 = static_cast<double>(n["p1"]); m_p2 = static_cast<double>(n["p2"]); n = fs["projection_parameters"]; m_fx = static_cast<double>(n["fx"]); m_fy = static_cast<double>(n["fy"]); m_cx = static_cast<double>(n["cx"]); m_cy = static_cast<double>(n["cy"]); cout << "m_k1:" << m_k1 << " m_k2" << m_k2 << " m_p1:"<<m_p1 << " m_p2:" << m_p2<< endl; cout << "m_fx:" << m_fx << " m_fy" << m_fy << " m_cx:"<<m_cx << " m_cy:" << m_cy<< endl; return true; } bool PinholeCamera::Parameters::setFromParamsStruct(const std::string& n, int w, int h, double k1, double k2, double p1, double p2, double fx, double fy, double cx, double cy) { /* // 验证模型类型 if (params.model_type != "PINHOLE") { std::cerr << "Error: Expected PINHOLE model, got " << params.model_type << std::endl; return false; }*/ // 赋值参数 m_modelType = PINHOLE; m_cameraName = n; m_imageWidth = w; m_imageHeight = h; m_k1 = k1; m_k2 = k2; m_p1 = p1; m_p2 = p2; m_fx = fx; m_fy = fy; m_cx = cx; m_cy = cy; /* std::cout << "Parameters set from struct:" << std::endl; std::cout << "m_k1:" << m_k1 << " m_k2:" << m_k2 << " m_p1:" << m_p1 << " m_p2:" << m_p2 << std::endl; std::cout << "m_fx:" << m_fx << " m_fy:" << m_fy << " m_cx:" << m_cx << " m_cy:" << m_cy << std::endl; */ Parameters(const Parameters&) = default; return true; }为什么上述代码没问题,下述代码出现src/camera_model/src/camera_models/CameraFactory.cc:179:62: error: cannot allocate an object of abstract type ‘camodocal::PinholeCamera::Parameters’ 179 | PinholeCamera::Parameters params = camera->getParameters(); | ^ /home/xingchen/gongzuo/calibration_camera_imu/ros2_ws/src/calibration_cameraimu/src/camera_model/src/camera_models/CameraFactory.cc:179:31: error: cannot declare variable ‘params’ to be of abstract type ‘camodocal::PinholeCamera::Parameters’ 179 | PinholeCamera::Parameters params = camera->getParameters(); | ^~~~~~ make[2]: *** [CMakeFiles/camera_model.dir/build.make:118:CMakeFiles/camera_model.dir/src/camera_models/CameraFactory.cc.o] 错误 1 make[2]: *** [CMakeFiles/camera_model.dir/build.make:132:CMakeFiles/camera_model.dir/src/camera_models/CostFunctionFactory.cc.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:83:CMakeFiles/camera_model.dir/all] 错误 2 make: *** [Makefile:91:all] 错误 2
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值