没有匹配函数来调用‘std::set<unsigned int>::insert(std::size_t&)
no matching function for call to ‘std::set<unsigned int>::insert(std::size_t&)
我正在努力将我的包从 ros melodic 迁移到 ros noetic。在执行此操作时,我在 cmake 期间在 PCL 库中遇到了编译错误。包太大了,我在发生错误的地方给出了一些代码。任何指导都会有所帮助。
这是myfile.cpp
std::vector<bool> ignore_labels;
ignore_labels.resize(2);
ignore_labels[0] = true;
ignore_labels[1] = false;
//TODO commented that out i think we have to fix the error
ecc->setExcludeLabels(ignore_labels);
'''
这是它在行 ecc->setExcludeLabels(ignore_labels); 处调用的 PCL-1.10 库文件,此处发生错误,
'''
brief 在要排除的标签云中设置标签。
param[in] exclude_labels 对应于是否应考虑给定标签的布尔值向量
void
setExcludeLabels (const std::vector<bool>& exclude_labels)
{
exclude_labels_ = boost::make_shared<std::set<std::uint32_t> > ();
for (std::size_t i = 0; i < exclude_labels.size (); ++i)
if (exclude_labels[i])
exclude_labels_->insert (i);
}
'''
错误是
/usr/include/pcl-1.10/pcl/segmentation/euclidean_cluster_comparator.h:256:13: 错误:没有匹配函数来调用 'std::set::insert(std:: size_t&) 常量'
256 | exclude_labels_->插入(i);
| ^~~~~~~~~~~~~~~
在 /usr/include/c++/9/set:61,
包含的文件中
您不能将类型为 size_t
(通常为 UInt64
)的元素添加到 set<UInt32>
,因为您无法比较 UInt64
和 UInt32
。
错误发生是因为 size_t
的变量试图插入到容器 exclude_labels_
中。请将变量 i
转换为 uint32_t
然后尝试插入容器 exclude_labels_
.
我已经查看了这个库的源代码,这里是问题所在:
类型是 typedef:
问题是对象本身是 shared_ptr<const std::set<std::uint32_t>>
您发布的代码正在分配对象,但也在 const std::set
的实例上调用 std::set::insert
,该实例不存在,因为 std::set::insert
修改了 std::set
[ 的状态=21=]
注意编译器错误末尾的常量:‘std::set::insert(std::size_t&) const
这意味着您正在尝试调用 insert
的 const
版本,它不存在(也不可能存在)
我正在努力将我的包从 ros melodic 迁移到 ros noetic。在执行此操作时,我在 cmake 期间在 PCL 库中遇到了编译错误。包太大了,我在发生错误的地方给出了一些代码。任何指导都会有所帮助。 这是myfile.cpp
std::vector<bool> ignore_labels;
ignore_labels.resize(2);
ignore_labels[0] = true;
ignore_labels[1] = false;
//TODO commented that out i think we have to fix the error
ecc->setExcludeLabels(ignore_labels);
'''
这是它在行 ecc->setExcludeLabels(ignore_labels); 处调用的 PCL-1.10 库文件,此处发生错误,
''' brief 在要排除的标签云中设置标签。 param[in] exclude_labels 对应于是否应考虑给定标签的布尔值向量
void
setExcludeLabels (const std::vector<bool>& exclude_labels)
{
exclude_labels_ = boost::make_shared<std::set<std::uint32_t> > ();
for (std::size_t i = 0; i < exclude_labels.size (); ++i)
if (exclude_labels[i])
exclude_labels_->insert (i);
}
'''
错误是
/usr/include/pcl-1.10/pcl/segmentation/euclidean_cluster_comparator.h:256:13: 错误:没有匹配函数来调用 'std::set::insert(std:: size_t&) 常量' 256 | exclude_labels_->插入(i); | ^~~~~~~~~~~~~~~ 在 /usr/include/c++/9/set:61,
包含的文件中您不能将类型为 size_t
(通常为 UInt64
)的元素添加到 set<UInt32>
,因为您无法比较 UInt64
和 UInt32
。
错误发生是因为 size_t
的变量试图插入到容器 exclude_labels_
中。请将变量 i
转换为 uint32_t
然后尝试插入容器 exclude_labels_
.
我已经查看了这个库的源代码,这里是问题所在:
类型是 typedef:
问题是对象本身是 shared_ptr<const std::set<std::uint32_t>>
您发布的代码正在分配对象,但也在 const std::set
的实例上调用 std::set::insert
,该实例不存在,因为 std::set::insert
修改了 std::set
[ 的状态=21=]
注意编译器错误末尾的常量:‘std::set::insert(std::size_t&) const
这意味着您正在尝试调用 insert
的 const
版本,它不存在(也不可能存在)