2015-05-07 117 views
4

搜索一段时间后。我编写了一个简单的程序,试图解决我的更大的问题,更容易,很少或没有成功。这是在主要工作正常代码:Typedef结构未知类型名称

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一年...

+3

'#define PRUEBA_H #ifndef PRUEBA_H'应该是'#ifndef PRUEBA_H #define PRUEBA_H' – BLUEPIXY

回答

7

你必须与include guards ;-)

你想一个问题检查第一则定义它,而不是其他方式周围。

#define PRUEBA_H 
#ifndef PRUEBA_H 
... 

应该

#ifndef PRUEBA_H 
#define PRUEBA_H 
.... 
4

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

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

这是什么东西做的是定义符号那么,因为它定义的,之间的一切不包括和#endif

它需要:

#ifndef PRUEBA_H 
#define PRUEBA_H 

代替。


所以很明显的事情你的第三点你检查:

  • 检查的#define /的#ifndef

可以用一点点检查有可能做:-)

+1

Dislexia可能非常耗时......谢谢各位! – MikeMajara