C++ 具有相同存储类型的向量之间的函数不匹配

C++ 具有相同存储类型的向量之间的函数不匹配,c++,vector,allocator,function-templates,C++,Vector,Allocator,Function Templates,我定义了一个名为“Create2DBBox”的模板函数,仅用于从点云向量创建边界框,实现细节不太重要 我想使用模板PointTtype来接受不同的点类型,例如PointXYZ或'PointXYZI',问题是当我定义如下函数时: ``` 模板 std::vector Create2DBBox(const std::shared_ptr cloudVecIn,const Eigen::MatrixXf&projectMatrix,const cv::Size&imageSize) { 标准::向量b

我定义了一个名为
“Create2DBBox”
的模板函数,仅用于从点云向量创建边界框,实现细节不太重要

我想使用模板
PointT
type来接受不同的点类型,例如
PointXYZ
或'PointXYZI',问题是当我定义如下函数时: ```

模板
std::vector Create2DBBox(const std::shared_ptr cloudVecIn,const Eigen::MatrixXf&projectMatrix,const cv::Size&imageSize)
{
标准::向量bbox_vec_res;
对于(int i=0;isize();++i){
BBox2D bbox((*cloudVecIn)[i],项目矩阵,图像大小);
bbox车辆回推(bbox);
}
返回bbox_vec_res;
}
当我按如下方式使用此功能时:

 std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
 vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
std::shared_ptr clustered_vec=ogm_detector_.get_clustered_cloud_vec();
vector bbox_vec=传感器_fusion::Create2DBox(聚集_vec,this->transform_matrix,Size(this->image_raw_.cols,image_raw_.rows));
我得到一个错误:

error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
 D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
错误:调用“Create2DBBox(std::shared_ptr&,Eigen::MatrixXf&,cv::Size)”时没有匹配的函数
D> bbox\u vec=传感器\u融合::Create2dbox(聚集的\u vec,这个->变换矩阵,大小(这个->图像\u原始列,图像\u原始列));

我不知道,我猜这一定是第一个模板参数的原因。感谢您的帮助。

它们不同,因为您的函数使用自定义分配器共享指向向量的指针

由于您的函数不依赖于分配器,请执行以下操作:

template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
模板
std::vector Create2DBBox(const std::shared_ptr cloudVecIn,const Eigen::MatrixXf&projectMatrix,const cv::Size&imageSize)
甚至,您不需要共享指针,因此:

template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
模板
std::vector Create2DBBox(const容器和cloudVecIn,const特征::MatrixXf和projectMatrix,const cv::Size和imageSize)
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)