我做了一个程序,不知道为什么会显示一些错误:

error: conflicting types for 'loadSavedGame'
note: previous declaration of 'loadSavedGame' was here(In headers of file)
In function 'loadSavedGame':error: incompatible types when assigning to type 'struct saveGame' from type 'struct saveGame *'

我不明白,因为如果我用同样的方法声明了其他函数,请看:
        struct configParam{
           char *clave;
           char *valor;
        };

        struct saveGame{
           char *id;
           char *score;
           char *position;
           char *maze_level;
           char *achievements;
           char *time_playing;
           char *virtual_players;
        };

        void loadSettings(char fileName[],struct configParam *paramsReaded[], int *length, int *statusCode);
        void saveSettings(char fileName[],struct configParam paramsToWrite[], int length, int *statusCode);

        void loadSavedGame(char fileName[],struct saveGame *savedGamesReaded[], int *length, int *statusCode);
        void saveGame(char fileName[],struct saveGame savedGamesToWrite[], int length, int *statusCode);

    void loadSettings(char fileName[],struct configParam *paramsReaded[], int *length, int *statusCode){


        *paramsReaded = (struct configParam*)malloc((*length)*sizeof(struct configParam)); //THIS WORK
        int j;
        for(j=0; j<*length; j++){
            (*paramsReaded)[j].clave = (char *)malloc(MAX_STRING*sizeof(char)); //reserva de memoria para los miembros "clave" y "valor" de la estructura
            (*paramsReaded)[j].valor = (char *)malloc(MAX_STRING*sizeof(char));
        }

    }

void loadSavedGame(char fileName[], struct saveGame *savedGamesReaded, int *length, int *statusCode){

    *savedGamesReaded = (struct saveGame*)malloc((*length)*sizeof(struct saveGame)); // HERE SHOW AN ERROR :(
    int j;
    for(j=0; j<*length; j++){
        (*savedGamesReaded)[j].id = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].score = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].position = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].maze_level = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].achievements = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].time_playing = (char *)malloc(MAX_STRING*sizeof(char));
        (*savedGamesReaded)[j].virtual_players = (char *)malloc(MAX_STRING*sizeof(char));
    }






}

两个函数的工作原理基本相同,只有“loadsaveGame”指向一个较长的数组,然后我不知道为什么它不工作(函数loadsaveGame)
谢谢你们的回复伙计们

最佳答案

让我们进一步将其减少到MCVE。。。

void loadSettings(struct configParam *paramsReaded[]){
    *paramsReaded = malloc(42); // This compiles.
}

void loadSavedGame(struct saveGame *savedGamesReaded){
    *savedGamesReaded = malloc(42); // This doesn't.
}

有什么区别?让我们通过剥离参数标识符和实体来进一步研究,以形成这两个函数的原型:
void loadSettings(struct configParam *[]);
void loadSavedGame(struct saveGame *);

你现在明白区别了吗?第一个使用两级间接寻址(即*[]),而第二个仅使用一级间接寻址。
第一个使用正确的习惯用法,如果您打算分配给在loadSettings返回之后存在的对象。看起来很正常。
第二个尝试使用相同的模式,但是它缺少[]。。。嗯?
另外,为了将来的参考,请学习如何制作MCVES,这样你就可以更容易地发现这些简单的印刷问题。
P.P.S.在尝试将某些内容存储到它所指向的对象之前,不要忘记检查malloc的返回值(对于NULL值)。

关于c - 在struct中分配内存时类型不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32582731/

10-17 01:28