首页 > 解决方案 > 如何修复 C 中的“不兼容的指针类型”错误?

问题描述

我有关于函数指针的作业并在 C 中实现继承。我收到关于 Aralik、VerilenlerArasindan 和 Harfler 的“指针类型不兼容”错误。什么问题?

RastgeleKarakter.h

    struct RASTGELEKARAKTER{
        Random ran;
        char (*Harf)(struct RASTGELEKARAKTER*);
        char* (*Harfler)(struct RASTGELEKARAKTER*);
        char* (*Aralik)(struct RASTGELEKARAKTER*);
        char* (*VerilenlerArasindan)(struct RASTGELEKARAKTER*);
        char* (*Cumle)(struct RASTGELEKARAKTER*);
        void (*YokEt)(struct RASTGELEKARAKTER*);
    };

    typedef struct RASTGELEKARAKTER* RastgeleKarakter;

    RastgeleKarakter RastegeleKarakterOlustur();
    char RandomHarf(RastgeleKarakter);
    char* RandomHarfler(RastgeleKarakter,unsigned);
    char* RandomAralik(RastgeleKarakter,unsigned,char,char);
    char* RandomVerilenlerArasindan(RastgeleKarakter,unsigned,char*);
    char* RandomCumle(RastgeleKarakter);
    void RastgeleKarakterYokEt(RastgeleKarakter);

RastgeleKarakter.c

RastgeleKarakter RastegeleKarakterOlustur(){

    RastgeleKarakter karakter;
    karakter = (RastgeleKarakter)malloc(sizeof(struct RASTGELEKARAKTER));
    karakter->ran = RandomOlustur();
    karakter->Harf = &RandomHarf;
    karakter->Harfler = &RandomHarfler;
    karakter->Aralik = &RandomAralik;
    karakter->VerilenlerArasindan = &RandomVerilenlerArasindan;
    karakter->Cumle = &RandomCumle;
    karakter->YokEt = &RastgeleKarakterYokEt;
    return karakter;
}

标签: cfunctionpointers

解决方案


警告:来自不兼容指针类型的赋值 [-Wincompatible-pointer-types] karakter->Harfler = &RandomHarfler;

因为

char* ( Harfler)(结构 RASTGELEKARAKTER );

char* RandomHarfler(RastgeleKarakter,无符号);

RandomHarfler有两个参数,但Harfler必须接收一个指向函数的指针,该函数只得到一个struct RASTGELEKARAKTER*


警告:来自不兼容指针类型的赋值 [-Wincompatible-pointer-types] karakter->Aralik = &RandomAralik;

因为

char* ( Aralik)(结构 RASTGELEKAKTER );

char* RandomAralik(RastgeleKarakter,unsigned,char,char);

RandomAralik有 4 个参数,但Aralik必须接收一个指向函数的指针,该函数只得到一个struct RASTGELEKARAKTER*


警告:来自不兼容指针类型的赋值 [-Wincompatible-pointer-types] karakter->VerilenlerArasindan = &RandomVerilenlerArasindan;

因为

char* ( VerilenlerArasindan)(struct RASTGELEKARAKTER );

char* RandomVerilenlerArasindan(RastgeleKarakter,unsigned,char*);

RandomVerilenlerArasindan获得 3 个参数,但VerilenlerArasindan必须接收一个指向函数的指针,该函数仅获得一个struct RASTGELEKARAKTER*


推荐阅读