c - 如何修复 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;
}
解决方案
警告:来自不兼容指针类型的赋值 [-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*
推荐阅读
- amazon-dynamodb - 在 Java 中使用 DynamoDBMapper 更新特定属性
- sql-server - 如何在更新语句中使用游标?
- python - 将 NA 值替换为与其他相同值对应的值
- scope - 访问命名空间脚本变量
- regex - 用于 https、www 的 htaccess 重定向,文件上没有斜杠
- laravel - Laravel 7 可空验证不起作用(已应用所有解决方案)
- asp.net-core - 是否可以在 ASP.NET Core 中为单个控制器启用 XmlSerialization
- cordova - cordova-plugin-firebase 在 ionic 3 中不起作用
- shader - Directx奇怪的顶点着色器问题
- android - 如何通过意图加载 GLTF 模型?