首页 文章

Typedef struct未知类型名称[关闭]

提问于
浏览
4

搜索了一会儿 . 我编写了一个简单的程序来尝试解决我的更大问题更容易获得很少或没有成功 . 这是主要工作正常的代码:

typedef struct nimaginario{
    int parte_real;
    int parte_imaginaria;
}nimaginario;

int suma(nimaginario *n){
    return n->parte_real + n->parte_imaginaria;
};

#include <stdlib.h>

int main(){

    nimaginario *num = malloc(sizeof(nimaginario));
    num->parte_real = 1;
    num->parte_imaginaria = 2;
    int a = suma(num);
}

然后我尝试将它分成应该组织的不同部分 . 比如说:prueba.c,prueba.h和main.c

prueba.h:

#define PRUEBA_H
#ifndef PRUEBA_H

typedef struct nimaginario{
    int parte_real;
    int parte_imaginaria;
}nimaginario;

int suma(nimaginario *n);

#endif

prueba.c:

#include "prueba.h"

int suma(nimaginario *n){
    return n->parte_real + n->parte_imaginaria;
};

main.c中:

#include <stdlib.h>
#include "prueba.h"

int main(){

    nimaginario *num = malloc(sizeof(nimaginario));
    num->parte_real = 1;
    num->parte_imaginaria = 2;
    int a = suma(num);
}

首先,我使用命令'gcc main.c'编译 . 第二,我做了如下:'gcc prueba.c main.c'

并且第二次和这个特定的尝试(一百个)我得到这个错误:

prueba.c:3:10: error: unknown type name `nimaginario'
main.c: In function `main':
main.c:18:2: error: unknown type name `nimaginario'
main.c:18:35: error: `nimaginario' undeclared (first use in this function)
main.c:18:35: note: each undeclared identifier is reported only once for each function it appears in
main.c:19:5: error: request for member `parte_real' in something not a structure or union
main.c:20:5: error: request for member `parte_imaginaria' in something not a structure or union

我想我已经尝试了所有的东西 . 并且看到了我能看到的所有错误 . 我也搜索过很多东西,并在Stackoverflow中搜索,但没有成功 .

我尝试过的事情:

  • 更改typedef结构......并逐步执行此操作 .

  • 做第一个typedef,然后是struct,反之亦然 .

  • 更改struct和typedef中的标签名称 .

  • 检查#define /#ifndef

  • 全部改变指针(最初我希望结构是整数指针)忘记了typedef并只使用struct . 因此,始终将结构声明为结构nimaginario .

  • 检查我的文件在哪里 .

我只是没有锤子关闭 . 我觉得这么麻木只有一年没有C ......

2 回答

  • 7

    你有include guards ;-)的问题

    你想首先检查然后定义它,而不是相反 .

    #define PRUEBA_H
    #ifndef PRUEBA_H
    ...
    

    应该

    #ifndef PRUEBA_H
    #define PRUEBA_H
    ....
    
  • 4

    一个非常微妙的,前两行的顺序错误1:

    #define PRUEBA_H
    #ifndef PRUEBA_H
    // declare everything
    #endif
    

    这样做是定义符号然后,因为它被定义, #ifndef#endif 之间的所有内容都不包括在内 .

    它需要是:

    #ifndef PRUEBA_H
    #define PRUEBA_H
    

    代替 .


    1显然,你检查过的第三点是:

    • 检查#define /#ifndef

    可能会做更多的检查:-)

相关问题