c++ - 当我们将指向结构类型参数的指针传递给函数时,C++ 编译错误
问题描述
您好,我是 C++ 新手,遇到了以下代码。
typedef char MAC_ID[50];
typedef MAC_ID ZEGBEE_MAC_ID;
typedef struct ztest
{
int x;
ZEGBEE_MAC_ID y;
}ZTEST;
void zDataPro(int x, ZEGBEE_MAC_ID y)
{
printf("data %d and string %s", x, y);
}
void zExtractData(const ZTEST* pMsg)
{
// ZEGBEE_MAC_ID pData = pMsg->y;
zDataPro(pMsg->x, pMsg->y);
}
int main()
{
ZTEST data = {2, "12345678"};
zExtractData(&data);
return 0;
}
在行zDataPro(pMsg->x, pData);
我得到以下错误
error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
我认为这个错误是因为结构有指向 const 结构类型的指针,并且它的指针类型数据成员变为 const 并且期望接收函数的(zDataPro
)第二个参数也是 const。但在这里我无法更改接收器函数签名。所以更改了如下函数的代码zExtractData
void zExtractData(const ZTEST* pMsg)
{
ZEGBEE_MAC_ID pData = pMsg->y;
zDataPro(pMsg->x, pData);
}
但现在我得到以下错误
error: array must be initialized with a brace-enclosed initializer
ZEGBEE_MAC_ID pData = pMsg->y;
^
那么解决这个问题的正确方法是什么?
解决方案
你需要添加const
喜欢zDataPro
void zDataPro(const int x, const ZEGBEE_MAC_ID y)
因为你的原始参数zExtractData
是const
,所以所有结构的组件都成为const
该函数,所以从那里调用的第二个函数也将其视为const
.
推荐阅读
- javascript - 在 JavaScript 中查找“1.5×10^9”和“4.75×10^9”的正则表达式?
- .htaccess - 将 http 重定向到 https 在子目录中作为 404 出现问题 - 未找到
- apache-spark - 作业和任务持续时间的关系是 Spark UI
- javascript - 仅使用正则表达式保留字母数字值
- protocols - Session Initiation Protocol 如何表示有效载荷数据?
- karate - 如何在空手道中切换到窗口(不是 TAB)?
- php - PHP致命错误:未捕获的错误:调用未定义的函数sqlite_open()
- node.js - 变量 x 保存以下字符串数据。我如何解析它以用作对象
- groovy - 如何解释这个 Groovy 表达式?
- python - 如何让python通过cmake在自定义位置查找numpy(用于构建C++共享对象库)