在构造函数中使用类成员时的 C++ undefined reference

标签 c++ variables constructor ros

我是 C++ 的新手,所以这个问题听起来可能很愚蠢,但即使我用谷歌搜索了很长时间,我也找不到答案。我使用的是ROS环境,但我的问题应该是一般的C++问题,所以我决定在这里发布。

我有两个代码

1)

ros::Duration max_storage_time = ros::Duration().fromNSec(1ULL * 1000000000LL);
tf::TimeCache odometryCache(max_storage_time);

2)

tf::TimeCache odometryCache(ros::Duration max_storage_time = ros::Duration().fromNSec(1ULL * 1000000000LL));

第二个编译,而第一个不编译。对我来说,这似乎是完全一样的。第一个代码的错误是: 对 tf::TimeCache::TimeCache(ros::Duration)

的 undefined reference

tf::TimeCache 的文档可以在 http://docs.ros.org/jade/api/tf/html/c++/classtf_1_1TimeCache.html#acca87a70aeb9c3573cdbfec26f6bfe23 找到

有人可以告诉我我缺少什么吗?代码段之间的区别在哪里,为什么第一个代码段无法编译?

提前致谢!

最佳答案

问题是您没有正确链接到 ROS 库。
解决方案是正确设置链接器。

只有第一个实际调用了任何 ROS 函数 - 第二个声明了一个接受 ros::Duration 并返回 tf::TimeCache 的函数(这称为“最令人烦恼的解析”)。

如果您从不尝试使用 odometryCache,第二个不会导致任何问题。
如果您这样做(例如,odometryCache.clearList()),编译器会提示您正在尝试访问非聚合类型的成员,或者类似的内容。

如果您不尝试命名构造函数的参数:

tf::TimeCache odometryCache(ros::Duration().fromNSec(1ULL * 1000000000LL));

它会编译,但链接会像第一个片段一样失败。

关于在构造函数中使用类成员时的 C++ undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844518/

相关文章:

c++ - 在对其进行线程操作后保存 GDI+ 位图

javascript - JavaScript 中可以将初始化存储为字符串吗?

bash: 变量名后面直接跟其他参数?

c++ - 是否可以创建没有元组的复合构造函数?

c++ - 如何创建一个类对象数组,其构造函数只需要很少的参数?

c++ - 在 C++ 类方法中使用 *this 完全覆盖自实例化

c++ - Linux 64 位移植问题

pointers - Go中如何使用map作为数据载体?

python - 如何将基本类型的 shared_ptr 导出到 python

要包含的 PHP 传递变量