在函数中 - 错误:来自不兼容指针类型的赋值 [-Werror=incompatible-pointer-types]

Posted

技术标签:

【中文标题】在函数中 - 错误:来自不兼容指针类型的赋值 [-Werror=incompatible-pointer-types]【英文标题】:In function - Error: Assignment from incompatible pointer type [-Werror=incompatible-pointer-types] 【发布时间】:2021-11-16 06:28:47 【问题描述】:

您好,我正在初始化一个函数指针以替换布尔函数中的 switch 语句。所以我想使用结构的成员并将布尔函数的地址分配/复制给该成员。我后来的计划是移除开关盒并使用函数指针来处理特定类型(TYPE_A...等)

//Declaration of typedef as a boolean 
typedef bool (*tone_function_t) (state_t *state, u8_t type);

//typedef structure
typedef struct node 
    tone_function_t tone;
 node_t;

bool_t tone(state_t *state, u8_t type) 
    switch (type) 
        case TYPE_A :
        case TYPE_B :
        case TYPE_C :
        case TYPE_D :
        case TYPE_E :
            return TRUE;
    
  
    return FALSE;


int main(state_t *state) 
    node_t node;
    node.tone = &tone; //Compilation Error : assignment from incompatible pointer type. Am i doing any mistake here??
    return 0;

在将布尔函数的地址分配给结构的成员时,我遇到了编译错误。有什么线索可以解决这个问题吗? node->tone 也是一种错误的初始化方式。 尝试过 memcpy 或 malloc。它并没有真正起作用。

提前致谢!

【问题讨论】:

【参考方案1】:

tone 函数与指针类型不匹配。

tone 被声明返回 bool_t 但函数指针类型 tone_function_t 返回 bool

更改两者之一,使返回类型匹配。

【讨论】:

即使更改后我仍然有相同的编译错误。 @revanth 然后还有更多你没有向我们展示的内容。请使用minimal reproducible example 更新您的代码,其他人无需修改即可编译以获得与您相同的结果。 您的回答是正确的。我在代码中试验新东西,忘记了一些要改回来的东西,例如:tone_function_t *tone; (现在删除 *)现在它工作了。谢谢:)

以上是关于在函数中 - 错误:来自不兼容指针类型的赋值 [-Werror=incompatible-pointer-types]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 不兼容的指针类型(来自 NSDictionary 的 NSMutableDictionary)

如何修复不兼容的块指针类型发送错误?

得到错误而不是不兼容的指针类型警告

警告:从 C 中不兼容的指针类型返回

继承与多态C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态

类型兼容---子类的对象可以给父类指针赋值