结构内的结构导致问题

时间:2014-01-27 04:54:01

标签: c visual-studio-2012 struct

我正在为一个班级设计一个基本的游戏引擎。有三个基本部分,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中编译(我手动设置编译器选项)。

1 个答案:

答案 0 :(得分:1)

typedef你正在做一些非常奇怪的事情。

你在这里写的是什么:

typedef struct Argument;

应该是这样的:

typedef struct Argument Argument;

struct Argument是基础类型,您希望typedefArgument

现在,你基本上都试图告诉它用struct这个词替换单词Argument,这只会导致眼泪。

通常用法如下:

typedef struct GameObject
{
  char *name;
} GameObject;

或:

struct GameObject
{
  char *name;
};
typedef struct GameObject GameObject;