从'const char*'到'const S8*'的转换无效
invalid conversion from 'const char*' to 'const S8*'
我有一个S8类型定义,以及一个使用该定义类型的调试打印函数。
typedef signed char S8;
S32 CH_COM_DebugPrintf(const S8 *rpc_format, ...)
当我像下面这样调用这个printf函数时,
CH_COM_DebugPrintf("TunerCallback device id:[%d]rn", ri_Device);
CH_COM_DebugPrintf("TunerCallback event type:[%d]rn", renm_EventType);
编译时报错,是什么问题?
arm-hisiv200-linux-g++ -I./gtest/include -I../drv/include -g -Wall -Wextra -c src/chdrv_tunner_test.cc
src/chdrv_tunner_test.cc: In function 'void CHDRV_TEST_TunerCallback(S32, CHDRV_TUNER_EVENT_TYPE_e, void*)':
src/chdrv_tunner_test.cc:30: error: invalid conversion from 'const char*' to 'const S8*'
src/chdrv_tunner_test.cc:30: error: initializing argument 1 of 'S32 CH_COM_DebugPrintf(const S8*, ...)'
src/chdrv_tunner_test.cc:31: error: invalid conversion from 'const char*' to 'const S8*'
src/chdrv_tunner_test.cc:31: error: initializing argument 1 of 'S32 CH_COM_DebugPrintf(const S8*, ...)'
src/chdrv_tunner_test.cc: At global scope:
没有工作,因为我强制转换为(const S8*),请给我一些帮助。非常感谢你的帮助。
CH_COM_DebugPrintf((S8*)"TunerCallback device id:[%d]rn", ri_Device);
CH_COM_DebugPrintf((S8*)"TunerCallback event type:[%d]rn", renm_EventType);
字符串字面值的类型为char []
,是char
的数组。当传递给这样的函数时,它将被计算为指向其第一个元素的指针,即char *
。
char
和signed char
是不同的类型(即使char
在您的平台上签名)。一个指针不能隐式地转换为另一个指针。
如果你想传递字符串字面量而不进行显式转换,你的函数应该用第一个参数声明为const char *
。
根据标准(3.9.1基本类型):
Plain char、signed char和unsigned char是三种不同的类型。
"text"
形式的字符串字面值由const char
组成,而不是const signed char
或const unsigned char
。
由于它们是指针类型,因此可以很容易地将它们相互强制转换,但这不会隐式地完成。
您可以尝试:
CH_COM_DebugPrintf((S8*)"TunerCallback device id:[%du]rn", ri_Device);
CH_COM_DebugPrintf((S8*)"TunerCallback event type:[%du]rn", renm_EventType);
作为无符号值打印
也许你应该使用typedef unsigned char S8;
而不是signed
值,因为设备id和回调类型表示在语义上是正值。
相关文章:
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- "class<T>"到"class<const T>"转换运算符的惯用方法
- 编译器可以静默地从 const 转换为 const 和,反之亦然吗?
- 从 Object<const T> 转换为 Object<t>
- 为什么在设置类成员时会自动从 const 转换为 non-const 并发生?
- 同时向下投递并从 const 转换为非 const
- 没有匹配的操作数[template]/无法从Type const*转换为Type
- static const转换为c++共享库中的对象.是进程间共享的吗?
- 无法从 *const 转换为 &in += 运算符
- C2664 无法在 Qt C++ 中将参数 1 从用户 *const 转换为用户
- const转换操作符
- std::pair中的Const转换
- const转换为非const或非const转换为const
- C++11:无法将参数从'T *const'转换为'T *&&'
- Const转换std容器
- 复制构造函数将const转换为非const
- 在c++中将非const转换为const
- 无法将参数 1 从 'PrintVisitor *const ' 转换为 'Visirot &'
- 将const T* const转换为T*
- 操作符情况下的c++ const转换