POD是Plain Old Data的缩写,是 C++ 定义的一类数据结构概念,比如 int、float 等都是 POD 类型的。两个系统进行交换数据,如果没有办法对数据进行语义检查和解释,那就只能以非常底层的数据形式进行交互,而拥有 POD 特征的类或者结构体通过二进制拷贝后依然能保持数据结构不变。也就是说,能用C语言的memcpy(),memset()等函数进行操作的类、结构体就是POD类型的数据。一般我们要研究的问题是某class, struct, union是不是POD,在STL中就是元素的类型了。
template <class T, class Alloc = alloc> // 预设使用 alloc 为配置器 class vector {
}
1 2
std::string s="123"; printf("%s",s);
结果报错: cannot pass non-trivial object of type ‘std::string’ (aka ‘basic_string, allocator >’) to variadic function; expected type from format string was char*
service客户端发命令后,出现报错 ERROR: service [/service_name] responded with an error: b’’ ,原因在于service服务端的回调函数必须 return true
advertiseService的部分源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
boolServiceManager::advertiseService(const AdvertiseServiceOptions& ops) { boost::recursive_mutex::scoped_lock shutdown_lock(shutting_down_mutex_); if (shutting_down_) { returnfalse; } { boost::mutex::scoped_lock lock(service_publications_mutex_); // 如果service已经发布,就报错,然后返回,其实这里改成报警比较合适 if (isServiceAdvertised(ops.service)) { ROS_ERROR("Tried to advertise a service that is already advertised in this node [%s]", ops.service.c_str()); returnfalse; }
其中的bool ros::ServiceManager::unadvertiseService(const std::string& serv_name)作用是 Unadvertise a service. This call unadvertises a service, which must have been previously advertised, using advertiseService().