繁体   English   中英

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

[英]Unknown type name with typedef struct in C

此代码写在名为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结果之前添加结构; 它给了我这个错误。

GameMain.c:在函数“ main”中:

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

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

对于任何不知道的人,我使用...来表示我正在跳过不影响我描述的情况的代码,或者该代码是多余的

想法:

  1. 它是#ifndef ,而不是#ifdef 如果尚未定义MONSTER_H_运行该代码。
  2. 该结构的定义通常在头文件中。

综合所有这些,我们有:

怪物

#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

怪物

#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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM