我正在为一个班级设计一个基本的游戏引擎。有三个基本部分,GameObjects(我的游戏中的对象),Events(基于事件的引擎)和Arguments(可以是在Events中传递的int和float等内容)。如果我不包含“Event.h”(包括GameObject.h和Argument.h),我没有错误,所以它编译得很干净。但是,如果我尝试包含头文件,它会引发一个拟合。无论我看起来多么努力,我都看不到任何问题,我的头文件没有循环依赖,并且我的所有结构都已明确定义。头文件不应该相互重新定义。不太确定现在该做什么。我将添加以下文件。
GameObject.h
#ifndef GAMEOBJECT_H
#define GAMEOBJECT_H
typedef struct GameObject;
struct GameObject
{
char *name;
};
#endif
Argument.h
#ifndef ARGUMENT_H
#define ARGUMENT_H
#include "GameObject.h"
enum ARG_TYPES
{
TYPE_INT = 0,
TYPE_FLOAT,
TYPE_DOUBLE,
TYPE_STRING,
TYPE_CHAR,
TYPE_GO,
TYPE_NULL = -1
};
typedef struct Argument;
struct Argument
{
char *name;
int type;
union
{
int _int;
float _float;
double _double;
char *_string;
char _char;
GameObject *_go;
};
};
#endif
Event.h
#ifndef EVENT_H
#define EVENT_H
#include "GameObject.h"
#include "Argument.h"
#include "stdlib.h"
#define MAX_ARGS 8
enum EVENT_TYPE
{
EVENT_INPUT = 1,
EVENT_GAMEPLAY = 2,
EVENT_COLLISION = 3,
EVENT_OBJECT = 4,
EVENT_NULL = -1
};
typedef struct Event;
struct Event
{
int type; //this is the type of event that this event is.
char *name; //the name of the current event. If we include hashing, this will change to a number
unsigned int arg_num; //the number of arguments currently held by the event. This is mostly for adding events
Argument *args; //An array of arguments. To understand an argument, look at Argument.h
int flag; //A flag as to whether this event is in use. Used for optimizing searching
};
//there are a bunch of functions here, but they just cause the errors.
#endif
我一遍又一遍地重复这些错误。其他错误基本上来自我的结构未被定义,所以编译器大吼大叫他们的类型不存在。
//this one is repeated over and over a TON.
error C2143: syntax error : missing ')' before '*'
error C2143: syntax error : missing '{' before '*'
error C2059: syntax error : 'type'
error C2059: syntax error : ')'
我正在使用Visual Studio 2012 Professional,在C中编译(我手动设置编译器选项)。
答案 0 :(得分:1)
typedef
你正在做一些非常奇怪的事情。
你在这里写的是什么:
typedef struct Argument;
应该是这样的:
typedef struct Argument Argument;
struct Argument
是基础类型,您希望typedef
为Argument
。
现在,你基本上都试图告诉它用struct
这个词替换单词Argument
,这只会导致眼泪。
通常用法如下:
typedef struct GameObject
{
char *name;
} GameObject;
或:
struct GameObject
{
char *name;
};
typedef struct GameObject GameObject;