C中带有typedef结构的未知类型名称

时间:2014-10-10 21:43:25

标签: c struct typedef

此代码写在名为Monster.c的文件中。我在GameMain.c文件和Monster.c文件中定义了Monster.h。在Monster.h文件中,代码是:

#ifdef MONSTER_H_
#define MONSTER_H_

int Monster(int Selection);
EnemyStats MonsterStats(int Selection);

#endif

然后我在Monster.c文件中创建了我的typedef结构,并创建了函数来返回结构的值。

typedef struct EnemyStats
{
    int EnemyHP;
    int VictoryExp;
    int EnemyLevel;
}
EnemyStats;

EnemyStats MonsterStats(int Selection)
{
    struct EnemyStats value;

    switch(Selection)
    {
        case 1:
            value.EnemyLevel = 1;
            value.VictoryExp = 1;
            value.EnemyHP = 1;
            return value;

        case 2:
            value.EnemyLevel = 1;
            value.VictoryExp = 1;
            value.EnemyHP = 1;
            return value;
        ...
    }

在GameMain.c文件中,我使用此代码尝试访问存储在结构中的信息:

EnemyStats result;
...
printf("%d", result.EnemyLevel);

当我使用gcc GameMain.c Monster.c

时,它给出了错误
  

GameMain.c:40:2:错误:未知类型名称'EnemyStats'

     

GameMain.c:61:25:错误:请求成员'EnemyHP'不是   结构或联盟

如果我尝试在EnemyStats结果之前添加struct;它给了我这个错误。

  

GameMain.c:在函数'main'中:

     

GameMain.c:40:20:错误:'结果'的存储大小未知

我不确定我做错了什么。任何帮助表示赞赏。

对于任何不知道的人,我正在使用...说我正在跳过不会影响我描述的情况或代码冗余的代码

1 个答案:

答案 0 :(得分:9)

思想:

  1. #ifndef ,而不是#ifdef。如果尚未定义MONSTER_H_,您希望运行该代码。
  2. 结构的定义通常在头文件中。
  3. 把所有这些放在一起,我们有:

    Monster.h

    #ifndef MONSTER_H_
    #define MONSTER_H_
    
    typedef struct EnemyStats {
        int EnemyHP;
        int VictoryExp;
        int EnemyLevel;
    } EnemyStats;
    
    int Monster(int Selection);
    EnemyStats MonsterStats(int Selection);
    
    #endif
    

    Monster.c

    #include "Monster.h"
    
    EnemyStats MonsterStats(int selection)
    {
        struct EnemyStats value;
        return value;
    }
    
    int Monster(int selection) {
        return 0;
    }
    

    GameMain.c

    #include <stdio.h>
    #include "Monster.h"
    
    int main() {
        EnemyStats result;
        printf("%d", result.EnemyLevel);
    }