首页 新闻 会员 周边

C语言typedef自定义类型名

0
悬赏园豆:20 [已解决问题] 解决于 2015-04-29 19:11

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的主页 SharpeyeKardel | 初学一级 | 园豆:30
提问于:2015-04-28 20:59
< >
分享
最佳答案
1

把所有代码和报错信息贴出来塞,也许问题根本不在这个地方

收获园豆:20
lvyahui | 菜鸟二级 |园豆:236 | 2015-04-28 23:02

我也想这么做,可是代码太长了,好几个.c文件。

SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-28 23:06

@SharpeyeKardel: 所有错误信息呢

lvyahui | 园豆:236 (菜鸟二级) | 2015-04-28 23:09

@lvyahui: 

SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-28 23:11

@SharpeyeKardel: 这只是个警告,问题应该出在最前面

lvyahui | 园豆:236 (菜鸟二级) | 2015-04-28 23:16

@lvyahui: 这段代码式绝对没问题的,看第一个error出现的行数是多少

lvyahui | 园豆:236 (菜鸟二级) | 2015-04-28 23:19

@lvyahui: 我还是没看懂哪里不对? 申明一个指向这个结构类型的指针,哪里不合法?

SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-28 23:49

@SharpeyeKardel: .c的文件必须严格按照C语言的规范,变量声明不能放在执行代码(比如说函数调用)的后面

lvyahui | 园豆:236 (菜鸟二级) | 2015-04-29 19:10
其他回答(3)
0

没有问题

非/也 | 园豆:202 (菜鸟二级) | 2015-04-28 21:53
0

ASK函数里吧top指向了一个int类型空间

吴瑞祥 | 园豆:29449 (高人七级) | 2015-04-29 09:26

为什么top会指向int类型的空间?是我前面定义的宏ASK()分配没有被编译,编译器默认为int了?

支持(0) 反对(0) SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-29 09:29
0

1、问题应该是你的ASK导致的,不要把问题归结为struct的定义上。

2、把ASK这个宏直接展开到main里(不使用宏),看下结果。

3、预编译这代码,看生成的预处理后的代码(宏被展开后)的效果是否跟2一样。

519740105 | 园豆:5810 (大侠五级) | 2015-04-29 09:34

一样的错误

支持(0) 反对(0) SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-29 09:38

@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了,都忘光了)

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-29 09:42

@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的控制台代码,运行没问题。

支持(1) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-29 09:55

@519740105: 我也是win32,估计这开发环境有点蛋疼,我找找其他出错的地方

支持(0) 反对(0) SharpeyeKardel | 园豆:30 (初学一级) | 2015-04-29 09:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册