这段代码是在一个名为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:错误:请求在非
组织或联盟
如果我试图在EnemyStats结果之前添加struct,就会出现这个错误。
在函数“main”中:
GameMain.c:40:20:错误:“result”的存储大小未知
我不确定我做错了什么。如有任何帮助,我们将不胜感激。
对于任何不知道的人,我用如果说我跳过的代码不影响我描述的情况,或者代码是多余的

最佳答案

思想:
它是#ifndef,而不是#ifdef如果尚未定义MONSTER_H_,则需要运行该代码。
结构的定义通常放在头文件中。
把所有这些放在一起,我们有:
怪物.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

怪物c
#include "Monster.h"

EnemyStats MonsterStats(int selection)
{
    struct EnemyStats value;
    return value;
}

int Monster(int selection) {
    return 0;
}

配子体c
#include <stdio.h>
#include "Monster.h"

int main() {
    EnemyStats result;
    printf("%d", result.EnemyLevel);
}

关于c - C中具有typedef结构的未知类型名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26308481/

10-12 23:58