This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CODECOMPOSER:#515-D类型为"X"的值不能指派给类型为"Y"的实体。

Guru**** 2553260 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1102377/codecomposer-515-d-a-value-of-type-x-cannot-be-assigned-to-an-entity-of-type-y

部件号:CODECOMPOSER

您好,
我遇到了一个警告,似乎使我的MCU停止运行。 我在最近的程序中尝试使用指针。 我的第一个想法似乎按预期工作,但很快这些警告出现,导致我的MCU减速/根本不工作。

int                  *test = 0;

static int table1[43] = {
        5,  5,  5,  5,  5,  5,  6,  7,  9,  10, 11, 12, 13, 15, 16, 17, 18, 19,
        21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 40,
        40, 40, 40, 40, 40, 40, 40};
        
        
        
         *test =&table1; //this line causeses the mentioned error

#515-D类型"int(*)[43]"的值不能指派给类型"int"的实体
我想指向位置0的Array。

我还注意到,所有表达式都保留在“零”,尽管在使用逐步调试进行检查时,应该将这些表达式写入到该值。
虽然我已经禁用了优化功能,但并没有带来任何变化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Paul:

    您已将测试指针指定为零,即指向地址0x0万。

    由于使用了取消引用运算符,您正在尝试将值存储到问题行的地址0x0万。 而且table1已经是一个指针。

    我认为您可以执行以下任一操作:

    test = table1;

    test = &table1[0];

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Kier:
    感谢您的快速响应。 当用"&table1"进行初始化时替换零时,它似乎没有任何变化。 为什么您认为表1已经是一个指针?

    我还认为零是某种占位符,因为我的代码中有一个分支,它将table2分配给指针,而不是表1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="48.1139万" url="~/support/tools/code-composer-studio组/CCS/f/code-composer-studio论坛/110.2377万/Codecoser-515-d-a-value-of type-x-cannot -assign-to an实体类型-y/408.4238万#table1"[&table1]"

    您好,Paul:

    如果只使用"&table1"初始化测试指针,则表示 "test = pointer table1"的地址。 您需要(我认为)的是"test = address of table1 element 0"(测试=表1元素0的地址)。 您可以通过 上面的任一代码示例执行此操作。

    背景:数组/指针等效

    Table1是一个数组,但在后台它实际上是一个指针。 当你写table1[2]时,你真的说*(Table1 +2),table1[10]是*(Table1 +10),table1[0]是*(Table1 +0),与*table1相同。

    因此,table1是指向数组中第一个元素的指针。 由于test也是指向同一类型的指针,您可以将test直接分配给"table1",这是我在上述回复中的第一行代码。

    希望是有道理的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你做的是正确的。 在声明处将指针赋值到NULL,但在取消引用之前,同样检查是否有NULL指针,即指针清理。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议您通读  这一系列关于数组和指针之间关系的常见问题解答(而不是来自TI)。  我相信,这将使你能够自己解决问题。   

    谢谢,此致,

    -George