gpt4 book ai didi

c++ - "No matching functions to call to"发生在 C++ 中的构造函数中

转载 作者:行者123 更新时间:2023-11-30 01:58:23 25 4
gpt4 key购买 nike

这是我在程序中遇到的 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_没有正确构造的问题,为什么会在cyclical_上报错呢?为了确保,错误报告第 85 行是 cyclical_( DISTANCE_THRESHOLD, VOLUME_SIZE, VOLUME_X )

谁能帮我指出潜在的问题所在?

最佳答案

将所有东西拼凑在一起,我想你得到的是这个(通过暂时省略一些命名空间位来简化):

class KinfuTracker
{ // ....
CyclicalBuffer cyclical_;
CyclicalBuffer object_cyclical_;
// ....
};

KinfuTracker::KinfuTracker(/*arguments left out for simplicity*/) :
cyclical_( DISTANCE_THRESHOLD, VOLUME_SIZE, VOLUME_X ),
/* other member constructor/initializer bits */
{ // ......
}

我认为引起您问题的不是 cyclical_,而是 object_cyclical_object_cyclical_ 没有出现在构造函数/初始化器列表中,因此它是通过您尚未实现的默认构造函数构造的。

要么为 CyclicalBuffer 提供默认构造函数,设置合理的默认值,要么在您的 KinfoTracker 类中显式构造 object_cyclical_ 成员。

关于c++ - "No matching functions to call to"发生在 C++ 中的构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com