typedef struct student
{
char num[10];
char name[10];
char sex[3];
char dept[20];
char Class[20];
float gEngl;
float gComp;
float gMath;
float gSum;
struct student *next;
}stu;
单纯上面这段代码是否存在问题?为什么编译会出现see declaration of 'stu'这样的提示
把所有代码和报错信息贴出来塞,也许问题根本不在这个地方
我也想这么做,可是代码太长了,好几个.c文件。
@SharpeyeKardel: 所有错误信息呢
@lvyahui:
@SharpeyeKardel: 这只是个警告,问题应该出在最前面
@lvyahui: 这段代码式绝对没问题的,看第一个error出现的行数是多少
@lvyahui: 我还是没看懂哪里不对? 申明一个指向这个结构类型的指针,哪里不合法?
@SharpeyeKardel: .c的文件必须严格按照C语言的规范,变量声明不能放在执行代码(比如说函数调用)的后面
没有问题
ASK函数里吧top指向了一个int类型空间
为什么top会指向int类型的空间?是我前面定义的宏ASK()分配没有被编译,编译器默认为int了?
1、问题应该是你的ASK导致的,不要把问题归结为struct的定义上。
2、把ASK这个宏直接展开到main里(不使用宏),看下结果。
3、预编译这代码,看生成的预处理后的代码(宏被展开后)的效果是否跟2一样。
一样的错误
@SharpeyeKardel:
1、不使用stu,直接使用student呢?(也就是不使用typedef)
2、如果1没问题,可能是你在struct里使用了student来定义next
3、可以把student *next语句注释看
4、试下下面的代码:
typedef student stu;
struct student{}
或
typedef struct{student *next}studeng, stu;
(好久不搞C了,都忘光了)
@SharpeyeKardel:
#include "stdafx.h" #include "malloc.h" typedef struct student { char num[10]; char name[10]; char sex[3]; char dept[20]; char Class[20]; float gEngl; float gComp; float gMath; float gSum; struct student *next; }stu; int _tmain(int argc, _TCHAR* argv[]) { stu *top; top = (stu*)malloc(sizeof(stu)); int result = 0; if (top == NULL) { printf("fail"); result = -1; } else { top->next = NULL; free(top); } return -1; }
以上为win32的控制台代码,运行没问题。
@519740105: 我也是win32,估计这开发环境有点蛋疼,我找找其他出错的地方