繁体   English   中英

C ++中的函数指针错误

[英]Function Pointer Error in C++

这是我得到的错误:

error: no matching function for call to ‘pcl::ConditionalEuclideanClustering
<pcl::Normal>::setConditionFunction(bool (EuclideanPlaneSegmentation::*)(const pcl::Normal&, const pcl::Normal&, float))’ cec.setConditionFunction(&EuclideanPlaneSegmentation::customRegionGrowing; ^ note: candidate is:/segmentation/conditional_euclidean_clustering.h:125:7:
  note: void pcl::ConditionalEuclideanClustering
  <PointT>::setConditionFunction(bool (*)(const PointT&, const PointT&, float)) [with PointT = pcl::Normal] setConditionFunction (bool (*condition_function) (const PointT&, const PointT&, float)) ^ note: no known conversion for argument 1 from ‘bool (EuclideanPlaneSegmentation::*)(const
    pcl::Normal&, const pcl::Normal&, float)’ to ‘bool (*)(const pcl::Normal&, const pcl::Normal&, float)’

基本上,我有“ EuclideanPlaneSegmentation”类,并且我正在尝试应用此pcl教程: http : //pointclouds.org/documentation/tutorials/conditional_euclidean_clustering.php

在教程中,在主要功能上

cec.setConditionFunction (&customRegionGrowing);

尝试获取该功能:

    bool
    customRegionGrowing (const PointTypeFull& point_a, const   PointTypeFull&     point_b, float squared_distance)
    {
    Eigen::Map<const Eigen::Vector3f> point_a_normal = point_a.normal,        point_b_normal = point_b.normal;
    if (squared_distance < 10000)
    {
    if (fabs (point_a.intensity - point_b.intensity) < 8.0f)
      return (true);
    if (fabs (point_a_normal.dot (point_b_normal)) < 0.06)
      return (true);
  }
    else
    {
    if (fabs (point_a.intensity - point_b.intensity) < 3.0f)
    return (true);
    }
    return (false);
    }
}

我在课堂上有相同的功能,我尝试过:

cec.setConditionFunction(&EuclideanPlaneSegmentation::customRegionGrowing);

但它不起作用。 我收到我写的错误。

在课堂上,如果我尝试

cec.setConditionFunction (&customRegionGrowing);

我收到此错误:

/EuclideanPlaneSegmentation.cpp:402:28: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say ‘&EuclideanPlaneSegmentation::customRegionGrowing’ [-fpermissive]
      cec.setConditionFunction(&customRegionGrowing);
                                ^
  /EuclideanPlaneSegmentation.cpp:402:65: error: no matching function for call to ‘pcl::ConditionalEuclideanClustering<pcl::Normal>::setConditionFunction(bool (EuclideanPlaneSegmentation::*)(const pcl::Normal&, const pcl::Normal&, float))’
      cec.setConditionFunction(&customRegionGrowing);

有谁知道我如何解决这个问题怎么了?

setConditionFunction方法需要一个函数,但是您正在传递成员(非静态)方法。 声明传递的方法为static应该可以解决问题。

传递静态方法有效。 但是,如果您想根据情况动态重新配置参数,则可以使用

setConditionFunction(boost::bind(&regularization, this, _1, _2, _3))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM