【问题标题】:Vector iterator passed to function error向量迭代器传递给函数错误
【发布时间】:2014-06-26 20:03:50
【问题描述】:

我想将点云作为输入参数传递给点云库提出的函数,但这是我的问题: 我有一个点云向量,我想将它们一个一个地传递给一个过滤器,最终将它们放入另一个过滤的点云向量中。我为此使用了迭代器,但是期望点云作为输入的函数不采用迭代器......我不明白为什么。代码:

std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> pcl_filter(std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> rdy_to_pro_pcls){
    std::vector<int> indices;
    std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr>::iterator vIt_pcls = rdy_to_pro_pcls.begin();
    std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> vFilt_pcls;
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr without_nanpcl(new pcl::PointCloud<pcl::PointXYZRGB>);
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr filt_pcl(new pcl::PointCloud<pcl::PointXYZRGB>);

    for (vIt_pcls = rdy_to_pro_pcls.begin(); vIt_pcls != rdy_to_pro_pcls.end(); vIt_pcls++){

        pcl::removeNaNFromPointCloud(*vIt_pcls, *without_nanpcl, indices);
        pcl::VoxelGrid<pcl::PointXYZRGB> sor;
        sor.setInputCloud(*vIt_pcls);
        sor.setLeafSize(0.01f, 0.01f, 0.01f);
        sor.filter(*filt_pcl);
        vFilt_pcls.push_back(filt_pcl);
    }
    return vFilt_pcls;
}

我实际上想将 without_nanpcl 对象放入向量中。我不能更进一步,因为我的调试器不批准我正在做的事情。正如你在下面看到的,有一个名为 setInputCloud 的函数接受向量迭代器,我想用 pcl::removeNaNFromPointCloud 做同样的事情,但我不知道为什么它不起作用。

这是错误输出(代码示例的第 8 行):

error C2784: 'void pcl::removeNaNFromPointCloud(const pcl::PointCloud<PointT> &,pcl::PointCloud<PointT> &,std::vector<int,std::allocator<_Ty>> &)' : could not deduce template argument for 'const pcl::PointCloud<PointT> &' from 'boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB>>'

这里是 pcl::removeNaNFromPointCloud 声明:

void pcl::removeNaNFromPointCloud   (
const pcl::PointCloud< PointT > &   cloud_in,
pcl::PointCloud< PointT > &     cloud_out,
std::vector< int > &    index 
)   

你能帮我解决这个问题吗? 谢谢你

【问题讨论】:

  • 1. 调试器不认可?这意味着什么?您是否可能遇到编译错误?如果是这样,请发布完整的错误消息及其发生的行。 2.请出示pcl::removeNaNFromPointCloud的声明
  • 抱歉显示我的答案,我不知道如何在代码下划线...
  • 编辑您的问题并添加错误消息并指出它抱怨的源代码行。
  • 谢谢我刚刚完成了
  • 错误消息中有行号。不要忽略那些。确保发布了违规行,并标有 this is line number 12345 注释,并且帖子中包含足够多的源代码行以提供上下文。

标签: c++ vector iterator point-cloud-library


【解决方案1】:

从函数签名中,您可以看到它需要对pcl::PointCloud&lt; PointT &gt; 的引用(我假设它实际上是一个函数模板,PointT 是它的模板参数),但是您传入的是pcl::PointCloud&lt;pcl::PointXYZRGB&gt;::Ptr,获得通过取消引用迭代器。您还需要取消引用指针以获取点云对象:

pcl::removeNaNFromPointCloud(**vIt_pcls, *without_nanpcl, indices);

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2015-09-08
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多