- 问题描述:
- 问题分析:
- 处理思路:
- C++代码:
- 结果展示:
问题描述:
写的一个小demo,发现编译时有告警。
HisFault.cpp: In constructor ‘CHisFault::CHisFault()’:
HisFault.cpp:37:29: warning: ISO C++ forbids converting a string constant to ‘CHAR*’ {aka ‘char*’} [-Wwrite-strings]
Init(HISFAULTDBTABLENAME);
函数申明如下
///< 初始化,ps8hisTableName--保存的表名 BOOL32 Init(CHAR *ps8hisTableName);
宏定义如下
///< 历史故障表名 #define HISFAULTDBTABLENAME "InvHisFaultTable"问题分析:
Init函数需要传入一个字符串作为形参,我偷懒直接用宏定义了一个字符串,然后作为形参传入供模块初始化。其实这么使用就相当于把常量强制转为指针了,属于隐式的类型转换了,所以这就导致了上述的告警。
处理思路:显示地进行类型转换,从而规避这个告警。
C++代码: CHAR *tableName = (CHAR *) HISFAULTDBTABLENAME;
Init(tableName);
结果展示:
无编译告警,问题解决。



