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().
struct{ WORD wAction; //操作类型,仅在设置时有效。1-定位PTZ参数,2-定位P参数,3-定位T参数,4-定位Z参数,5-定位PT参数 WORD wPanPos; //P参数(水平参数) WORD wTiltPos; //T参数(垂直参数) WORD wZoomPos; //Z参数(变倍参数) }NET_DVR_PTZPOS, *LPNET_DVR_PTZPOS;
含义是:用户不存在。注册的用户 ID 已注销或不可用。同一个程序,控制摄像头转动,在我的电脑能用,换到工控机上报次错误。重新注册用户仍然报错。结果发现链接的库目录没有HCNetSDKCom时,报错107;有它的时候,报错47. 更奇怪的是,随便填用户名和密码时,不会报登录错误,此时获得的userID仍是0,正常来说,如果登录信息有错,userID应该为负。