这里是我在程序中的C++构造函数问题。“没有匹配的函数调用”发生在C++的构造函数中
问题发生在这里,程序中未检测到的构造函数cyclical_。这里
pcl::gpu::kinfuLS::KinfuTracker::KinfuTracker
( const Eigen::Vector3f &volume_size, const float shiftingDistance,
int rows, int cols) :
//
// error lies here, no matching function for cyclical_()
//
cyclical_(DISTANCE_THRESHOLD, VOLUME_SIZE, VOLUME_X),
rows_(rows), cols_(cols), global_time_(0), max_icp_distance_(0),
integration_metric_threshold_(0.f),
perform_last_scan_ (false), finished_(false), lost_ (false),
disable_icp_ (false), perform_segmentation_(false)
{
....
}
该cyclical_类是明确定义和引用。它被定义为下面的一个。完整的原始完整在这里。 https://github.com/lvzhaoyang/pcl/blob/master/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/kinfu.h 我在程序中添加了一些参数,但我没有更改任何与CyclicalBuffer相关的参数。
CyclicalBuffer cyclical_;
CyclicalBuffer object_cyclical_; // another member of type CyclicalBuffer, but the error shows the former one, not this one. Someone say it might affect.
enum { VOLUME_X = 512, VOLUME_Y = 512, VOLUME_Z = 512 };
const float VOLUME_SIZE = 3.0f;
const float DISTANCE_THRESHOLD = 1.5f;
而CyclicalBuffer类的定义如下。原来的这里是:https://github.com/lvzhaoyang/pcl/blob/master/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h这部分我没有改变任何东西。
namespace pcl
{
namespace gpu
{
namespace kinfuLS
{
class PCL_EXPORTS CyclicalBuffer
{
public:
CyclicalBuffer (const double distance_threshold, const double cube_size = 3.f, const int nb_voxels_per_axis = 512)
{
distance_threshold_ = distance_threshold;
buffer_.volume_size.x = cube_size;
buffer_.volume_size.y = cube_size;
buffer_.volume_size.z = cube_size;
buffer_.voxels_size.x = nb_voxels_per_axis;
buffer_.voxels_size.y = nb_voxels_per_axis;
buffer_.voxels_size.z = nb_voxels_per_axis;
}
CyclicalBuffer (const double distance_threshold, const double volume_size_x, const double volume_size_y, const double volume_size_z, const int nb_voxels_x, const int nb_voxels_y, const int nb_voxels_z)
{
distance_threshold_ = distance_threshold;
buffer_.volume_size.x = volume_size_x;
buffer_.volume_size.y = volume_size_y;
buffer_.volume_size.z = volume_size_z;
buffer_.voxels_size.x = nb_voxels_x;
buffer_.voxels_size.y = nb_voxels_y;
buffer_.voxels_size.z = nb_voxels_z;
}
...
}
}
};
但是,当我编译问题,给出了这样的错误:
/home/lv/pcl-trunk/gpu/kinfu_large_scale/src/kinfu.cpp: In constructor ‘pcl::gpu::kinfuLS::KinfuTracker::KinfuTracker(const Vector3f&, float, int, int)’:
/home/lv/pcl-trunk/gpu/kinfu_large_scale/src/kinfu.cpp:85:53: error: no matching function for call to ‘pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer()’
/home/lv/pcl-trunk/gpu/kinfu_large_scale/src/kinfu.cpp:85:53: note: candidates are:
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:96:11: note: pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer(double, double, double, double, int, int, int)
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:96:11: note: candidate expects 7 arguments, 0 provided
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:75:11: note: pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer(double, double, int)
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:75:11: note: candidate expects 3 arguments, 0 provided
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:65:25: note: pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer(const pcl::gpu::kinfuLS::CyclicalBuffer&)
/home/lv/pcl-trunk/gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/cyclical_buffer.h:65:25: note: candidate expects 1 argument, 0 provided
我不太明白的错误候选人预计3个参数,提供0。我想我已经提供了正确的论点数量,并且明确提到了一切。
谢谢你对我的问题的讨论。我想我找到了一些线索,但我不知道为什么。问题可能在于CyclicalBuffer类型的第二个成员。
CyclicalBuffer cyclical_;
CyclicalBuffer object_cyclical_; // when I comment everything related to this. The error disappears.
这似乎很奇怪。我不知道第二个成员是如何给第一个成员带来错误的。如果这是object_cyclical_未正确构造的问题,为什么它会报告cycleical_上的错误?为了确保错误报告行85是循环线(DISTANCE_THRESHOLD,VOLUME_SIZE,VOLUME_X)
任何人都可以帮我指出它存在的潜在问题吗?
CyclicalBuffer在类的末尾有一个缺失的分号 - 您已将它放在名称空间右花括号上,但我认为这不是问题 – doctorlove
您可以在此处显示的代码中标记第85行吗?它是你在初始化'cyclical_'的行吗?有没有其他的'KinfuTracker'构造函数你没有显示? –
我想你需要向我们展示'KinfuTracker'的全部定义(头部中的部分),因为你向我们展示的代码看起来没有任何问题。 –