[英]How to fix “incompatible pointer type” error in 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)(struct RASTGELEKARAKTER );
但
char * RandomHarfler(RastgeleKarakter,unsigned);
RandomHarfler獲取兩個參數,但Harfler必須接收一個指向函數的指針,該函數只獲得一個struct RASTGELEKARAKTER*
警告:從不兼容的指針類型分配[-Wincompatible-pointer-types] karakter-> Aralik =&RandomAralik;
因為
char *( Aralik)(struct RASTGELEKARAKTER );
但
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*
Harfler
成員被聲明為指向帶有struct RASTGELEKARAKTER *
的函數的指針:
char* (*Harfler)(struct RASTGELEKARAKTER*);
但是你試圖為它分配一個指向RandomHarf的指針:
karakter->Harf = &RandomHarf;
聲明是一個指向函數的指針,該函數接受struct RASTGELEKARKTER *
(通過typedef
RastgeleKarakter
)和unsigned
:
char* RandomHarfler(RastgeleKarakter,unsigned);
指向帶有一個參數的函數的指針與指向帶有兩個參數的函數的指針不兼容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.