error_code.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. //Error_code是错误码的底层通用模块,
  2. //功能:用作故障分析和处理。
  3. //用法:所有的功能接口函数return错误管理类,
  4. //然后上层判断分析错误码,并进行故障处理。
  5. #ifndef TEST_ERROR_ERROR_CODE_H
  6. #define TEST_ERROR_ERROR_CODE_H
  7. #include <string>
  8. #include <string.h>
  9. #include<iostream>
  10. //错误管理类转化为字符串 的前缀,固定长度为58
  11. //这个是由显示格式来确定的,如果要修改格式或者 Error_code长度超过8位,Error_level长度超过2位,折需要重新计算
  12. #define ERROR_NAMAGER_TO_STRING_FRONT_LENGTH 58
  13. //进程加锁的状态,
  14. enum Lock_status
  15. {
  16. UNLOCK = 0,
  17. LOCK = 1,
  18. };
  19. //设备使能状态,
  20. enum Able_status
  21. {
  22. UNABLE = 0,
  23. ENABLE = 1,
  24. };
  25. //数据是否为空
  26. enum Empty_status
  27. {
  28. NON_EMPTY = 0,
  29. EMPTY = 1,
  30. };
  31. //错误码的枚举,用来做故障分析
  32. enum Error_code
  33. {
  34. //成功,没有错误,默认值0
  35. SUCCESS = 0x00000000,
  36. //基本错误码,
  37. ERROR = 0x00000001,//错误
  38. PARTIAL_SUCCESS = 0x00000002,//部分成功
  39. WARNING = 0x00000003,//警告
  40. FAILED = 0x00000004,//失败
  41. NO_DATA = 0x00000010,//没有数据,传入参数容器内部没有数据时,
  42. INVALID_MESSAGE = 0x00000011, //无效的消息,
  43. RESPONSE_TIMEOUT = 0x00000012,
  44. POINTER_IS_NULL = 0x00000101,//空指针
  45. PARAMETER_ERROR = 0x00000102,//参数错误,传入参数不符合规范时,
  46. POINTER_MALLOC_FAIL = 0x00000103,//手动分配内存失败
  47. CLASS_BASE_FUNCTION_CANNOT_USE = 0x00000201,//基类函数不允许使用,必须使用子类的
  48. CONTAINER_IS_TERMINATE = 0x00000301,//容器被终止
  49. // 错误码的规范,
  50. // 错误码是int型,32位,十六进制。
  51. // 例如0x12345678
  52. // 12表示功能模块,例如:laser雷达模块 框架制定
  53. // 34表示文件名称,例如:laser_livox.cpp 框架制定
  54. // 56表示具体的类,例如:class laser_livox 个人制定
  55. // 78表示类的函数,例如:laser_livox::start(); 个人制定
  56. // 注:错误码的制定从1开始,不要从0开始,
  57. // 0用作错误码的基数,用来位运算,来判断错误码的范围。
  58. // laser扫描模块
  59. LASER_ERROR_BASE = 0x01000000,
  60. // laser_base基类
  61. LASER_BASE_ERROR_BASE = 0x01010000,
  62. LASER_TASK_PARAMETER_ERROR = 0x01010001, //雷达基类模块, 任务输入参数错误
  63. LASER_CONNECT_FAILED, //雷达基类模块, 连接失败
  64. LASER_START_FAILED, //雷达基类模块, 开始扫描失败
  65. LASER_CHECK_FAILED, //雷达基类模块, 检查失败
  66. LASER_STATUS_BUSY, //雷达基类模块, 状态正忙
  67. LASER_STATUS_ERROR, //雷达基类模块, 状态错误
  68. LASER_TASK_OVER_TIME, //雷达基类模块, 任务超时
  69. LASER_QUEUE_ERROR, //雷达基类模块, 数据缓存错误
  70. // laser_livox.cpp的错误码
  71. LIVOX_ERROR_BASE = 0x01020000,
  72. LIVOX_START_FAILE, //livox模块,开始扫描失败
  73. LIVOX_TASK_TYPE_ERROR, //livox模块,任务类型错误
  74. lIVOX_CANNOT_PUSH_DATA, //livox模块,不能添加扫描的数据
  75. lIVOX_CHECK_FAILED, //livox模块,检查失败
  76. lIVOX_STATUS_BUSY, //livox模块,状态正忙
  77. lIVOX_STATUS_ERROR, //livox模块,状态错误
  78. //laser_manager 雷达管理模块
  79. LASER_MANAGER_ERROR_BASE = 0x01030000,
  80. LASER_MANAGER_READ_PROTOBUF_ERROR, //雷达管理模块,读取参数错误
  81. LASER_MANAGER_STATUS_BUSY, //雷达管理模块,状态正忙
  82. LASER_MANAGER_STATUS_ERROR, //雷达管理模块,状态错误
  83. LASER_MANAGER_TASK_TYPE_ERROR, //雷达管理模块,任务类型错误
  84. LASER_MANAGER_IS_NOT_READY, //雷达管理模块,不在准备状态
  85. LASER_MANAGER_LASER_INDEX_ERRPR, //雷达管理模块,雷达索引错误,编号错误。
  86. LASER_MANAGER_TASK_OVER_TIME, //雷达管理模块,任务超时
  87. LASER_MANAGER_LASER_INDEX_REPEAT, //雷达管理模块,需要扫描的雷达索引重复,可忽略的错误,提示作用
  88. //livox_driver 雷达livox驱动模块
  89. LIVOX_DRIVER_ERROR_BASE = 0x01040000,
  90. LIVOX_DRIVER_SN_REPEAT, //livox驱动模块, 雷达广播码重复
  91. LIVOX_DRIVER_SN_ERROR, //livox驱动模块, 雷达广播码错误
  92. LIVOX_SKD_INIT_FAILED, //livox驱动模块, livox_sdk初始化失败
  93. LIVOX_DRIVER_NOT_READY, //livox驱动模块, livox没有准备好.
  94. //locate 定位模块,
  95. LOCATER_ERROR_BASE = 0x03000000,
  96. //LASER_MANAGER 定位管理模块
  97. LOCATER_MANAGER_ERROR_BASE = 0x03010000,
  98. LOCATER_MANAGER_READ_PROTOBUF_ERROR, //定位管理模块,读取参数错误
  99. LOCATER_MANAGER_STATUS_BUSY, //定位管理模块,状态正忙
  100. LOCATER_MANAGER_STATUS_ERROR, //定位管理模块,状态错误
  101. LOCATER_MANAGER_TASK_TYPE_ERROR, //定位管理模块,任务类型错误
  102. LOCATER_MANAGER_IS_NOT_READY, //定位管理模块,不在准备状态
  103. LOCATER_MANAGER_CLOUD_MAP_ERROR, //定位管理模块,任务输入点云map的error
  104. LOCATE_MANAGER_TASK_OVER_TIME,
  105. //Locater.cpp error from 0x0301000-0x030100FF
  106. LOCATER_TASK_INIT_CLOUD_EMPTY ,
  107. LOCATER_TASK_ERROR,
  108. LOCATER_TASK_INPUT_CLOUD_UNINIT,
  109. LOCATER_INPUT_CLOUD_EMPTY,
  110. LOCATER_YOLO_UNINIT,
  111. LOCATER_POINTSIFT_UNINIT,
  112. LOCATER_3DCNN_UNINIT,
  113. LOCATER_INPUT_YOLO_CLOUD_EMPTY,
  114. LOCATER_Y_OUT_RANGE_BY_PLC,
  115. LOCATER_MEASURE_HEIGHT_CLOUD_UNINIT,
  116. LOCATER_MEASURE_HEIGHT_CLOUD_EMPTY,
  117. LOCATER_INPUT_CLOUD_UNINIT,
  118. //point sift from 0x03010100-0x030101FF
  119. LOCATER_SIFT_INIT_FAILED=0x03010100,
  120. LOCATER_SIFT_INPUT_CLOUD_UNINIT,
  121. LOCATER_SIFT_INPUT_CLOUD_EMPTY,
  122. LOCATER_SIFT_GRID_ERROR,
  123. LOCATER_SIFT_SELECT_ERROR,
  124. LOCATER_SIFT_CLOUD_VERY_LITTLE,
  125. LOCATER_SIFT_CREATE_INPUT_DATA_FAILED,
  126. LOCATER_SIFT_PREDICT_FAILED,
  127. LOCATER_SIFT_PREDICT_NO_WHEEL_POINT,
  128. LOCATER_SIFT_PREDICT_NO_CAR_POINT,
  129. LOCATER_SIFT_FILTE_OBS_FAILED,
  130. LOCATER_SIFT_INPUT_BOX_PARAMETER_FAILED,
  131. // //yolo from 0x03010200-0x030102FF
  132. // LOCATER_YOLO_DETECT_FAILED=0x03010200,
  133. // LOCATER_YOLO_DETECT_NO_TARGET,
  134. // LOCATER_YOLO_PARAMETER_INVALID,
  135. // LOCATER_YOLO_INPUT_CLOUD_UNINIT,
  136. //3dcnn from 0x03010300-0x030103FF
  137. LOCATER_3DCNN_INIT_FAILED=0x03010300,
  138. LOCATER_3DCNN_INPUT_CLOUD_UNINIT,
  139. LOCATER_3DCNN_INPUT_CLOUD_EMPTY,
  140. LOCATER_3DCNN_INPUT_CLOUD_MAP_ERROR,
  141. LOCATER_3DCNN_PCA_OUT_ERROR,
  142. LOCATER_3DCNN_EXTRACT_RECT_ERROR,
  143. LOCATER_3DCNN_RECT_SIZE_ERROR,
  144. LOCATER_3DCNN_PREDICT_FAILED,
  145. LOCATER_3DCNN_VERIFY_RECT_FAILED_3,
  146. LOCATER_3DCNN_VERIFY_RECT_FAILED_4,
  147. LOCATER_3DCNN_KMEANS_FAILED,
  148. LOCATER_3DCNN_IIU_FAILED,
  149. LOCATER_3DCNN_PCA_OUT_CLOUD_EMPTY,
  150. //System_manager error from 0x04010000-0x0401FFFF
  151. SYSTEM_READ_PARAMETER_ERROR=0x04010100,
  152. SYSTEM_PARAMETER_ERROR,
  153. SYSTEM_INPUT_TERMINOR_NO_LASERS,
  154. //terminor_command_executor.cpp from 0x04010200-0x040102FF
  155. TERMINOR_NOT_READY=0x04010200,
  156. TERMINOR_INPUT_LASER_NULL,
  157. TERMINOR_NOT_CONTAINS_LASER,
  158. TERMINOR_INPUT_PLC_NULL,
  159. TERMINOR_INPUT_LOCATER_NULL,
  160. TERMINOR_CREATE_WORKING_THREAD_FAILED,
  161. TERMINOR_FORCE_QUIT,
  162. TERMINOR_LASER_TIMEOUT,
  163. TERMINOR_POST_PLC_TIMEOUT,
  164. TERMINOR_CHECK_RESULTS_ERROR,
  165. ////Hardware limit from 0x05010000 - 0x0501ffff
  166. ///railing.cpp from 0x05010100-0x050101ff
  167. HARDWARE_LIMIT_LEFT_RAILING=0x05010100, //左栏杆限制
  168. HARDWARE_LIMIT_RAILING_PARAMETER_ERROR,
  169. HARDWARE_LIMIT_RAILING_ERROR,
  170. HARDWARE_LIMIT_CENTER_X_LEFT,
  171. HARDWARE_LIMIT_CENTER_X_RIGHT,
  172. HARDWARE_LIMIT_CENTER_Y_TOP,
  173. HARDWARE_LIMIT_CENTER_Y_BOTTOM,
  174. HARDWARE_LIMIT_HEIGHT_OUT_RANGE,
  175. HARDWARE_LIMIT_ANGLE_OUT_RANGE,
  176. //termonal_limit from 0x05010200-0x050102ff
  177. HARDWARE_LIMIT_TERMINAL_LEFT_ERROR,
  178. HARDWARE_LIMIT_TERMINAL_RIGHT_ERROR,
  179. HARDWARE_LIMIT_TERMINAL_LR_ERROR,
  180. //wj_lidar error from 0x06010000-0x0601FFFF
  181. WJ_LIDAR_CONNECT_FAILED=0x06010000,
  182. WJ_LIDAR_UNINITIALIZED,
  183. WJ_LIDAR_READ_FAILED,
  184. WJ_LIDAR_WRITE_FAILED,
  185. WJ_LIDAR_GET_CLOUD_TIMEOUT,
  186. //wj lidar protocol error from 0x06020000-0x0602FFFF
  187. WJ_PROTOCOL_ERROR_BASE=0x06020000,
  188. WJ_PROTOCOL_INTEGRITY_ERROR,
  189. WJ_PROTOCOL_PARSE_FAILED,
  190. WJ_PROTOCOL_EMPTY_PACKAGE,
  191. WJ_PROTOCOL_EXCEED_MAX_SIZE,
  192. //wj region detect error from 0x06030000-0x0603FFFF
  193. WJ_REGION_EMPTY_CLOUD=0x06030000,
  194. WJ_REGION_RECTANGLE_ANGLE_ERROR,
  195. WJ_REGION_RECTANGLE_SIZE_ERROR,
  196. WJ_REGION_RECTANGLE_SYMMETRY_ERROR,
  197. WJ_REGION_CLUSTER_SIZE_ERROR,
  198. //wj manager error from 0x06040000-0x0604FFFF
  199. WJ_MANAGER_UNINITIALIZED=0x06040000,
  200. WJ_MANAGER_LIDAR_DISCONNECTED,
  201. WJ_MANAGER_PLC_DISCONNECTED,
  202. WJ_MANAGER_EMPTY_CLOUD,
  203. WJ_LIDAR_TASK_EMPTY_RESULT=0x06050000,
  204. WJ_LIDAR_TASK_EMPTY_TASK,
  205. WJ_LIDAR_TASK_WRONG_TYPE,
  206. WJ_LIDAR_TASK_INVALID_TASK,
  207. WJ_LIDAR_TASK_MEASURE_FAILED,
  208. //task module, 任务模块 error from 0x10010000-0x1001FFFF
  209. TASK_MODULE_ERROR_BASE = 0x10010000,
  210. TASK_TYPE_IS_UNKNOW,
  211. TASK_NO_RECEIVER,
  212. //Communication module, 通信模块
  213. COMMUNICATION_BASE_ERROR_BASE = 0x11010000,
  214. COMMUNICATION_READ_PROTOBUF_ERROR, //模块,读取参数错误
  215. COMMUNICATION_BIND_ERROR,
  216. COMMUNICATION_CONNECT_ERROR,
  217. COMMUNICATION_ANALYSIS_TIME_OUT, //解析超时,
  218. COMMUNICATION_EXCUTER_IS_BUSY, //处理器正忙, 请稍等
  219. //system module, 系统模块
  220. SYSTEM_EXECUTOR_ERROR_BASE = 0x12010000, //系统执行模块,
  221. SYSTEM_EXECUTOR_PARSE_ERROR, //系统执行模块, 解析消息错误
  222. SYSTEM_EXECUTOR_STATUS_BUSY, //系统执行模块, 状态正忙
  223. SYSTEM_EXECUTOR_STATUS_ERROR, //系统执行模块, 状态错误
  224. SYSTEM_EXECUTOR_CHECK_ERROR, //系统执行模块, 检查错误
  225. LOCATER_MSG_TABLE_NOT_EXIST ,
  226. LOCATER_MSG_RESPONSE_TYPE_ERROR,
  227. LOCATER_MSG_RESPONSE_INFO_ERROR,
  228. LOCATER_MSG_REQUEST_INVALID,
  229. LOCATER_MSG_RESPONSE_HAS_NO_REQUEST,
  230. //parkspace allocator,车位分配模块
  231. PARKSPACE_ALLOCATOR_ERROR_BASE = 0x20010000,
  232. PARKSPACE_ALLOCATOR_MSG_REQUEST_TYPE_ERROR, //反馈车位消息类型错误
  233. PARKSPACE_ALLOCATOR_MSG_RESPONSE_TYPE_ERROR, //反馈车位消息类型错误
  234. PARKSPACE_ALLOCATOR_MSG_PARSE_ERROR, //请求消息解析错误
  235. PARKSPACE_ALLOCATOR_SPACE_EMPTY, //空车位异常,车库无车位。或许由模块初始化异常产生
  236. PARKSPACE_ALLOCATOR_ALLOCATE_FAILED, //无合适车位,分配失败
  237. PARKSPACE_ALLOCATOR_SEARCH_FAILED, //未找到车辆对应车位
  238. PARKSPACE_ALLOCATOR_RELEASE_FAILED, //未找到匹配的车位,车位未释放
  239. PARKSPACE_ALLOCATOR_FORCE_UPDATE_FAILED, //手动更新失败,未找到匹配车位
  240. PARKSPACE_ALLOCATOR_PARAM_ERROR, //传入参数错误,内部无车辆信息
  241. PARKSPACE_ALLOCATOR_CONFIRM_ALLOC_ERROR, //确认分配车位错误
  242. // 数据库操作
  243. DB_ERROR_BASE = 0x20020000,
  244. DB_INIT_FAILED,
  245. DB_CONNECT_FAILED, //数据库连接失败
  246. DB_INSERT_FAILED, //数据库插入失败
  247. DB_DELETE_FAILED, //数据库删除失败
  248. DB_UPDATE_FAILED, //数据库更新失败
  249. DB_QUERY_FAILED, //数据库查询失败
  250. DB_UNINITIALIZED, //数据库外层未初始化
  251. DB_DISCONNECTED, //数据库外层连接失去
  252. DB_RESULT_SET_EMPTY, //数据库外层查询返回结果空指针
  253. DB_RESULT_SET_PARSE_ERROR, //数据库外层查询结果解析失败
  254. };
  255. //错误等级,用来做故障处理
  256. enum Error_level
  257. {
  258. // 正常,没有错误,默认值0
  259. NORMAL = 0,
  260. // 轻微故障,可忽略的故障,NEGLIGIBLE_ERROR
  261. // 提示作用,不做任何处理,不影响代码的流程,
  262. // 用作一些不重要的事件,即使出错也不会影响到系统功能,
  263. // 例如:文件保存错误,等
  264. NEGLIGIBLE_ERROR = 1,
  265. // 一般故障,MINOR_ERROR
  266. // 用作底层功能函数的错误返回,表示该功能函数执行失败,
  267. // 返回给应用层之后,需要做故障分析和处理,
  268. // 例如:雷达数据传输失败,应用层就需要进行重新扫描,或者重连,或者重置参数等。
  269. MINOR_ERROR = 2,
  270. // 严重故障,MAJOR_ERROR
  271. // 用作应用层的任务事件的结果,表示该功能模块失败。
  272. // 通常是底层函数返回一般故障之后,应用层无法处理并解决故障,此时就要进行故障升级,
  273. // 从一般故障升级为严重故障,然后进行回退流程,回退已经执行的操作,最终回到故障待机状态。
  274. // 需要外部清除故障,并复位至正常待机状态,才能恢复功能的使用。
  275. // 例如:雷达扫描任务失败,且无法自动恢复。
  276. MAJOR_ERROR = 3,
  277. // 致命故障,CRITICAL_ERROR
  278. // 系统出现致命错误。导致系统无法正常运行,
  279. // 此时系统应该紧急停机,执行紧急流程,快速停机。
  280. // 此时不允许再执行任何函数和任务指令,防止系统故障更加严重。
  281. // 也不需要做任何错误处理了,快速执行紧急流程。
  282. // 例如:内存错误,进程挂死,关键设备失控,监控设备报警,等
  283. CRITICAL_ERROR = 4,
  284. };
  285. class Error_manager
  286. {
  287. public://外部接口函数
  288. //构造函数
  289. Error_manager();
  290. //拷贝构造
  291. Error_manager(const Error_manager & error_manager);
  292. //赋值构造
  293. Error_manager(Error_code error_code, Error_level error_level = NORMAL,
  294. const char* p_error_description = NULL, int description_length = 0);
  295. //赋值构造
  296. Error_manager(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  297. //析构函数
  298. ~Error_manager();
  299. //初始化
  300. void error_manager_init();
  301. //初始化
  302. void error_manager_init(Error_code error_code, Error_level error_level = NORMAL,
  303. const char* p_error_description = NULL, int description_length = 0);
  304. //初始化
  305. void error_manager_init(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  306. //重置
  307. void error_manager_reset(Error_code error_code, Error_level error_level = NORMAL,
  308. const char* p_error_description = NULL, int description_length = 0);
  309. //重置
  310. void error_manager_reset(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  311. //重置
  312. void error_manager_reset(const Error_manager & error_manager);
  313. //清除所有内容
  314. void error_manager_clear_all();
  315. //重载=
  316. Error_manager& operator=(const Error_manager & error_manager);
  317. //重载=,支持Error_manager和Error_code的直接转化,会清空错误等级和描述
  318. Error_manager& operator=(Error_code error_code);
  319. //重载==
  320. bool operator==(const Error_manager & error_manager);
  321. //重载==,支持Error_manager和Error_code的直接比较
  322. bool operator==(Error_code error_code);
  323. //重载!=
  324. bool operator!=(const Error_manager & error_manager);
  325. //重载!=,支持Error_manager和Error_code的直接比较
  326. bool operator!=(Error_code error_code);
  327. //重载<<,支持cout<<
  328. friend std::ostream & operator<<(std::ostream &out, Error_manager &error_manager);
  329. //获取错误码
  330. Error_code get_error_code();
  331. //获取错误等级
  332. Error_level get_error_level();
  333. //获取错误描述的指针,(浅拷贝)
  334. char* get_error_description();
  335. int get_description_length();
  336. //复制错误描述,(深拷贝)
  337. //output:p_error_description 错误描述的字符串指针,不可以为NULL,必须要有实际的内存
  338. //output:description_length 错误描述的字符串长度,不可以为0,长度最好足够大,一般256即可。
  339. void copy_error_description(const char* p_error_description, int description_length);
  340. //复制错误描述,(深拷贝)
  341. //output:error_description_string 错误描述的string
  342. void copy_error_description(std::string & error_description_string);
  343. //设置错误码
  344. void set_error_code(Error_code error_code);
  345. //比较错误等级并升级,取高等级的结果
  346. void set_error_level_up(Error_level error_level);
  347. //比较错误等级并降级,取低等级的结果
  348. void set_error_level_down(Error_level error_level);
  349. //错误等级,设定到固定值
  350. void set_error_level_location(Error_level error_level);
  351. //设置错误描述
  352. void set_error_description(const char* p_error_description, int description_length = 0);
  353. //设置错误描述
  354. void set_error_description(std::string & error_description_string);
  355. //尾部追加错误描述
  356. void add_error_description(const char* p_error_description, int description_length = 0);
  357. //尾部追加错误描述
  358. void add_error_description(std::string & error_description_string);
  359. //比较错误是否相同,
  360. // 注:只比较错误码和等级
  361. bool is_equal_error_manager(const Error_manager & error_manager);
  362. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  363. //如果错误相同,则保留this的,将输入参数转入描述。
  364. void compare_and_cover_error(const Error_manager & error_manager);
  365. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  366. //如果错误相同,则保留this的,将输入参数转入描述。
  367. void compare_and_cover_error( Error_manager * p_error_manager);
  368. //将所有的错误信息,格式化为字符串,用作日志打印。
  369. //output:p_error_description 错误汇总的字符串指针,不可以为NULL,必须要有实际的内存
  370. //output:description_length 错误汇总的字符串长度,不可以为0,长度最好足够大,一般256即可。
  371. void translate_error_to_string(char* p_error_aggregate, int aggregate_length);
  372. //output:error_description_string 错误汇总的string
  373. void translate_error_to_string(std::string & error_aggregate_string);
  374. //错误码转字符串的简易版,可支持cout<<
  375. //return 错误汇总的string
  376. std::string to_string();
  377. protected:
  378. Error_code m_error_code; //错误码
  379. Error_level m_error_level; //错误等级
  380. char* pm_error_description; //错误描述
  381. int m_description_length; //错误描述的字符长度
  382. protected://内部功能函数
  383. public:
  384. //释放错误描述的内存,
  385. void free_description();
  386. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  387. //input:p_error_description 错误描述的字符串指针,可以为NULL,
  388. //input:description_length 错误描述的字符串长度,如果为0,则从p_error_description里面获取有效的长度
  389. void reallocate_memory_and_copy_string(const char* p_error_description, int description_length = 0);
  390. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  391. //input:error_aggregate_string 错误描述的string
  392. void reallocate_memory_and_copy_string(std::string & error_aggregate_string);
  393. };
  394. #endif //TEST_ERROR_ERROR_CODE_H