gpt4 book ai didi

c - 在结构中分配内存时类型不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:56 24 4
gpt4 key购买 nike

我正在编写一个程序,但不知道为什么 Code::Blocks 会显示一些错误:

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”指向一个更长的数组,然后我不知道为什么它不起作用(function loadsaveGame)谢谢大家的回复

最佳答案

让我们将其进一步缩减为 MCVE ...

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

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

有什么区别?让我们通过剥离参数标识符和主体以形成这两个函数的原型(prototype)来进一步研究:

void loadSettings(struct configParam *[]);
void loadSavedGame(struct saveGame *);

现在你看出区别了吗?第一个使用两级间接(*[]),而第二个只使用一级间接。

如果您打算分配给 loadSettings 返回后存在的对象,则第一个使用正确的习惯用法。看起来很正常。

第二个尝试使用相同的模式,但它缺少 []...嗯?

附言为了以后引用,请学习如何制作MCVE这样您就可以自己更轻松地发现这些简单的排版问题。

附言不要忘记检查 malloc 的返回值(对于 NULL 值)您尝试将某些内容存储到它指向的对象中之前。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com