Typedef struct 未知类型名称
Typedef struct unknown type name
经过一段时间的搜索。我编写了一个简单的程序来尝试更轻松地解决我的更大问题,但收效甚微或没有成功。这是在 main 中运行良好的代码:
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
我想我什么都试过了。并看到了我能看到的所有错误。我也用谷歌搜索了很多,并在 Whosebug 中进行了搜索,但始终没有成功。
我尝试过的事情:
- 正在更改 typedef 结构...并逐步进行。
- 首先执行 typedef,然后执行 struct,反之亦然。
- 正在更改 struct 和 typedef 中的标签名称。
- 检查#define /#ifndef
- 完全改变指针(最初我希望结构是整数指针)忘记了 typedef 并且只使用结构。因此始终声明为 struct nimaginario.
- 检查了我的文件在哪里。
我只是没能关闭锤子。感觉麻木了一年没C了...
您对 include guards 有疑问 ;-)
您想先检查,然后定义,而不是相反。
#define PRUEBA_H
#ifndef PRUEBA_H
...
应该是
#ifndef PRUEBA_H
#define PRUEBA_H
....
一个非常微妙的,前两行顺序错误1:
#define PRUEBA_H
#ifndef PRUEBA_H
// declare everything
#endif
这是在定义符号,因为它 是 定义的,所以不包括 #ifndef
和 #endif
之间的所有内容。
需要是:
#ifndef PRUEBA_H
#define PRUEBA_H
相反。
1 显然你检查的第三个要点:
- 检查#define /#ifndef
可以做一些 更多 检查 :-)
经过一段时间的搜索。我编写了一个简单的程序来尝试更轻松地解决我的更大问题,但收效甚微或没有成功。这是在 main 中运行良好的代码:
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
我想我什么都试过了。并看到了我能看到的所有错误。我也用谷歌搜索了很多,并在 Whosebug 中进行了搜索,但始终没有成功。
我尝试过的事情:
- 正在更改 typedef 结构...并逐步进行。
- 首先执行 typedef,然后执行 struct,反之亦然。
- 正在更改 struct 和 typedef 中的标签名称。
- 检查#define /#ifndef
- 完全改变指针(最初我希望结构是整数指针)忘记了 typedef 并且只使用结构。因此始终声明为 struct nimaginario.
- 检查了我的文件在哪里。
我只是没能关闭锤子。感觉麻木了一年没C了...
您对 include guards 有疑问 ;-)
您想先检查,然后定义,而不是相反。
#define PRUEBA_H
#ifndef PRUEBA_H
...
应该是
#ifndef PRUEBA_H
#define PRUEBA_H
....
一个非常微妙的,前两行顺序错误1:
#define PRUEBA_H
#ifndef PRUEBA_H
// declare everything
#endif
这是在定义符号,因为它 是 定义的,所以不包括 #ifndef
和 #endif
之间的所有内容。
需要是:
#ifndef PRUEBA_H
#define PRUEBA_H
相反。
1 显然你检查的第三个要点:
- 检查#define /#ifndef
可以做一些 更多 检查 :-)