"No matching functions to call to"发生在C++的构造函数上
"No matching functions to call to" happen to constructors in 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_没有正确构造,为什么它会在cyclical_上报告错误?为了确保,错误报告行85是循环_(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_
成员。
正如Todd Murray在评论中提到的那样,CyclicalBuffer cyclical_;
行调用了一个没有参数的构造函数CyclicalBuffer()
。由于您的代码没有定义具有零参数的默认构造函数,因此编译器不会隐式定义默认构造函数。当您简单地声明cyclical_
时,这会导致一个错误。因此,您需要创建一个零参数构造函数,或者更改代码,以便在声明cyclical_
时使用正确数量的参数初始化它。
示例:
简单地切换一些代码并添加正确的构造就可以生成一个有效的代码。
enum { VOLUME_X = 512, VOLUME_Y = 512, VOLUME_Z = 512 };
const float VOLUME_SIZE = 3.0f;
const float DISTANCE_THRESHOLD = 1.5f;
CyclicalBuffer cyclical_ = new CyclicalBuffer(DISTANCE_THRESHOLD, VOLUME_SIZE, VOLUME_X);
在代码的某个地方,您可以调用CyclicalBuffer
的默认构造函数(无参数):
no matching function for call to
‘pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer()’
但是类CCD_ 12没有这样的构造函数。
编译器只能找到具有3、7个参数的构造函数和复制构造函数(具有1个参数)。因此,它测试了所有这3个候选者,但找不到匹配的候选者,因为您调用的构造函数没有参数(提供了0个参数)。
在代码中搜索并找到调用默认构造函数的位置。
如果您有CyclicalBuffer
成员,但没有在类的构造函数中初始化它,则调用默认构造函数,这是不可能的,因为CyclicalBuffer
没有它。示例:
struct Data
{
Data(int, int) {}
int x, y;
};
struct MyClass
{
MyClass() {} // error C2512: 'Data' : no appropriate default constructor available
Data data;
};
struct MyClass2
{
MyClass():
data(41, 13) // OK
{}
Data data;
};
若我理解正确的话,类已经有了cyclicalbuffer_
成员,它是在构造函数初始值设定项列表中初始化的。但是您又添加了一个这样的成员,并且没有初始化它。
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")