首页 > 解决方案 > 当我们将指向结构类型参数的指针传递给函数时,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;
                                ^

那么解决这个问题的正确方法是什么?

标签: c++arraysconstants

解决方案


你需要添加const喜欢zDataPro

void zDataPro(const int x, const ZEGBEE_MAC_ID y)

因为你的原始参数zExtractDataconst,所以所有结构的组件都成为const该函数,所以从那里调用的第二个函数也将其视为const.


推荐阅读