Как исправить ошибку «несовместимый тип указателя» в C? - PullRequest
3 голосов
/ 21 апреля 2019

У меня есть домашняя работа о указателях функций и реализации наследования в 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;
}

Ответы [ 2 ]

3 голосов
/ 21 апреля 2019

предупреждение: назначение из несовместимого типа указателя [-Wincompatible-pointer-types] karakter-> Harfler = & RandomHarfler;

потому что

char * ( Harfler) (struct RASTGELEKARAKTER );

но

char * RandomHarfler (РастгелеКарактер, без знака);

RandomHarfler получает два аргумента, но Harfler должен получить указатель на функцию, получающую только struct RASTGELEKARAKTER*


предупреждение: присваивание из несовместимого типа указателя [-Wincompatible-pointer-types] karakter-> Aralik = & RandomAralik;

потому что

char * ( Aralik) (struct RASTGELEKARAKTER );

но

char * RandomAralik (РастгелеКарактер, без знака, char, char);

RandomAralik получает 4 аргумента, но Aralik должен получить указатель на функцию, получающую только struct RASTGELEKARAKTER*


предупреждение: присвоение из несовместимого типа указателя [-Wincompatible-pointer-types] karakter-> VerilenlerArasindan = & RandomVerilenlerArasindan;

потому что

char * ( VerilenlerArasindan) (struct RASTGELEKARAKTER );

но

char * RandomVerilenlerArasindan (РастгелеКарактер, без знака, символ *);

RandomVerilenlerArasindan получает 3 аргумента, но VerilenlerArasindan должен получить указатель на функцию, получающую только struct RASTGELEKARAKTER*

2 голосов
/ 21 апреля 2019

Член Harfler объявляется как указатель на функцию, которая принимает struct RASTGELEKARAKTER *:

char* (*Harfler)(struct RASTGELEKARAKTER*);

но вы пытаетесь присвоить ему указатель на RandomHarf:

karakter->Harf = &RandomHarf;

который объявлен как указатель на функцию, которая принимает struct RASTGELEKARKTER * (через typedef RastgeleKarakter) и unsigned:

char* RandomHarfler(RastgeleKarakter,unsigned);

Указатель на функцию, которая принимает один параметр, несовместим с указателем на функцию, которая принимает два параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...