起因是我在结构体里面定义了两个指针变量,为了图省事嘛,所以用逗号隔开,只写了一次数据类型。
typedef struct
{
InitDataTypedef Init;
InputDataTypedef Input;
OutputDataTypedef Output;
int16_t* FMagOffset,/*习惯性只写一次类型*/
BMagOffset;/*其实第一个变量是指针,第二个是int16_t整型了*/
} DisMagNavTypedef;
然后就对指针赋值,结果编译器告诉我左边变量是int16_t,右边是int16_t* ,让我去掉“&”,直接怀疑人生。。。
void Function_Init(void)
{
if(DisMagNavP->Input.FLMode == ForwardMode)/*正向巡线模式*/
{
DisMagNavP->BMagOffset = &DisMagNavP->Input.BackMagOffset;
}
/*other code*/
}
error: a value of type " int16_t * " cannot be assigned to an entity of type " int16_t "
其实稍微修改一下就OK了 哈哈哈
typedef int16_t* int16p_t;
typedef struct
{
InitDataTypedef Init;
InputDataTypedef Input;
OutputDataTypedef Output;
int16p_t FMagOffset,/*只写一次类型*/
BMagOffset;/*第二个都是int16_t指针了*/
} DisMagNavTypedef;
或者
typedef struct
{
InitDataTypedef Init;
InputDataTypedef Input;
OutputDataTypedef Output;
int16_t *FMagOffset,/*只写一次类型*/
*BMagOffset;/*在所有变量前都要加 “ * ” */
} DisMagNavTypedef;
挺低级的错误,惯性思维认为 int16_t* 是一个整体,其实“ * ”是修饰变量的,不是修饰类型的。