我无法让此代码正常工作。当我尝试编译它时,会发生以下三种情况之一:要么我不会出错,但是当我运行程序时,它会立即锁定;或者它会编译得很好,但是当我运行它时说“分段错误”并退出;或者在编译时给出警告:
"conflicting types for ‘addObjToTree’
previous implicit declaration of ‘addObjToTree’ was here"
但是然后说“分段错误”并在我尝试运行它时退出。
我在使用 gcc 的 Mac OS X 10.6 上。
游戏-obj.h:
typedef struct itemPos {
float x;
float y;
} itemPos;
typedef struct gameObject {
itemPos loc;
int uid;
int kind;
int isEmpty;
...
} gameObject;
内部例程.h:
void addObjToTree (gameObject *targetObj, gameObject *destTree[]) {
int i = 0;
int stop = 1;
while (stop) {
if ((*destTree[i]).isEmpty == 0)
i++;
else if ((*destTree[i]).isEmpty == 1)
stop = 0;
else
;/*ERROR*/
}
if (stop == 0) {
destTree[i] = targetObj;
}
else
{
;/*ERROR*/
}
}
/**/
void initFS_LA (gameObject *target, gameObject *tree[], itemPos destination) {
addObjToTree(target, tree);
(*target).uid = 12981;
(*target).kind = 101;
(*target).isEmpty = 0;
(*target).maxHealth = 100;
(*target).absMaxHealth = 200;
(*target).curHealth = 100;
(*target).skill = 1;
(*target).isSolid = 1;
(*target).factionID = 555;
(*target).loc.x = destination.x;
(*target).loc.y = destination.y;
}
主.c:
#include "game-obj.h"
#include "internal-routines.h"
#include <stdio.h>
int main()
{
gameObject abc;
gameObject jkl;
abc.kind = 101;
abc.uid = 1000;
itemPos aloc;
aloc.x = 10;
aloc.y = 15;
gameObject *masterTree[3];
masterTree[0] = &(abc);
initFS_LA(&jkl, masterTree, aloc);
printf("%d\n",jkl.factionID);
return 0;
}
我不明白为什么它不起作用。我只想addObjToTree(...)
在masterTree的下一个空闲空间中添加一个指向gameObject的指针,它是一个指向gameObject结构的指针数组。更奇怪的是,如果我从中删除这条线addObjToTree(target, tree);
就initFS_LA(...)
可以完美地工作。我已经创建了一个搜索的函数,masterTree
它uid
也可以正常工作,即使我gameObject
用initFS_LA(...)
(不带addObjToTree
行)初始化一个新函数。我已经尝试重新排列头文件中的函数,将它们放入单独的头文件中,对它们进行原型设计,重新排列#include
s 的顺序,显式创建指针变量而不是使用&jkl
,但绝对没有任何效果。有任何想法吗?我很感激任何帮助