我不允许更改变量的声明,还可以通过其他方式编辑代码吗?

时间:2019-05-23 21:04:05

标签: c++ microcontroller

我知道这个警告已经被问过很多次了。但是我想不起来如何编辑代码。

我仅在错误/警告部分包含代码。

const unsigned char *ad[100];
unsigned long long ad[100];

int main
{
    adlen = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);  
    if(adlen > 0)
    {
        ad[i] = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
        i++;
        adlen--;
    }
}

编译后,我会收到警告。

warning: assignment makes pointer from integer without a cast
ad[i] = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
      ^

我也尝试过在线搜索另一种声明方式。

const unsigned char *ad; //or const unsigned char *ad = malloc(100);
unsigned long long ad[100];

int main
{
    adlen = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);  
    if(adlen > 0)
    {
        ad[i] = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
        i++;
        adlen--;
    }
}

但是我最终会得到一个错误

error: assignment of read-only location '(ad + (sizetype)((unsigned int)i * 1u))'
ad[i] = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
      ^

我无法更改,而必须声明const unsigned char *ad作为指针,因此我可能必须在int main中向我的代码添加/更改某些内容,但我无法考虑如何/做什么。

如果有人可以帮助/指导我如何处理此警告和错误,我将感到非常高兴。谢谢!

1 个答案:

答案 0 :(得分:2)

函数CDC_Device_ReceiveByte返回类型为int16_t的值,因此您需要

int16_t ad[100];