鱼C论坛

 找回密码
 立即注册
查看: 3467|回复: 17

把结构体单独写到头文件中!错误不断。

[复制链接]
发表于 2011-10-5 00:36:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Y.H 于 2012-4-1 22:44 编辑

我把源代码发上来。看了代码编译一次就知道什么问题了!
超级实验自己写头文件.rar (207.14 KB, 下载次数: 14)

我记得刚开始的时候正常运行了一次!
但是之后就不行了  一直出错 错误号:e:\src\超级实验自己写头文件\stud.h(4) : error C2011: 'student' : 'struct' type redefinition

说什么结构类型重新定义。不知道什么意思?
有什么解决方法?

刚刚学会把程序分为多个模块。。。。所以还有很多不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 00:42:40 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-5 00:45 编辑

你是不是把结构体给分出来了?
我这不能看告诉我危险
我建议你第一次不要分那么多的头文件容易迷糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 00:44:43 | 显示全部楼层
本帖最后由 Y.H 于 2011-10-5 00:45 编辑

嗯嗯,正是的 ,我把结构体分出来单独写成了一个  stud.h 文件 里面的内容:

#define LEN 4
struct student
{
        char name[10];
        int num;
        int age;
        char addr[15];
}stud[LEN];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 00:54:07 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-5 00:55 编辑
Y.H 发表于 2011-10-5 00:44
嗯嗯,正是的 ,我把结构体分出来单独写成了一个  stud.h 文件 里面的内容:

#define LEN 4


scanf ("%s%d%d%s", stud.name, &stud.num, &stud.age, stud.addr);
不能这样写
#define LEN 4
struct student                  //学生数据.
{
        char name[10];
        int num;
        int age;
        char addr[15];
}stud[LEN];
你可以在结构体里有个函数带上scanf(),然后再主函数里调用。
这样显得麻烦啰嗦不如一开始。
有QQ留个QQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 01:13:01 | 显示全部楼层
crazylinux 发表于 2011-10-5 00:54
scanf ("%s%d%d%s", stud.name, &stud.num, &stud.age, stud.addr);
不能这样写
#define LEN 4

晕。。。。 QQ:297360476

加好友是注明哦!  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 01:14:41 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-5 01:15 编辑

把代码都贴出来看看。。
我自己测试是没问题的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 01:19:24 | 显示全部楼层
yipwing 发表于 2011-10-5 01:14
把代码都贴出来看看。。
我自己测试是没问题的。。

啊,你下载了那个附件运行没问题???

那你在运行一次看看行不行。。。。。

我的代码也是附件里的啊,没一丁点不同的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 01:21:02 | 显示全部楼层
都怪我的氪金,没看见附件。。Sorry..!!
我编译看看。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 01:24:47 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-5 01:44 编辑

这个问题,是典型的多重定义了。。
你的结构体在main.c和save.h里面都有用到。。导致了重复。。
现在说预处理器还太早了(如果有心可以去看看预处理器的方法避免多重定义)。。现阶段处理办法就只有把save.h里面的代码写到main.c里面。。以传递参数方式。。。另外这个预处理器可以处理 #pragma once 在.h文件开始处加入。
这里是我调整的代码,基本没改里面的代码,只是加了个.h文件,你看看?
test.zip (830 Bytes, 下载次数: 4)
希望对你有帮助。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 02:16:07 | 显示全部楼层
本帖最后由 Y.H 于 2011-10-5 02:16 编辑
yipwing 发表于 2011-10-5 01:24
这个问题,是典型的多重定义了。。
你的结构体在main.c和save.h里面都有用到。。导致了重复。。
现在说预 ...

还没看兄台的代码。。。。。
不过乱搞也差不多搞出来了:



天啊,,终于退了一步又一步退到现在的地步,终于可以了。。。。

有三个文件,分别是主函数main、save函数(把结构变量中的数据写入文件)、load函数(把文件中的数据读入结构变量中)并输出。。。。

注意这里的save,load函数中的结构变量完全没有关联,因为现在还没想到怎么引用同一个结构。(今天思路不通,想使用传递参数的方法也总做不出来)

所以就在每个函数里单独声明定义了另外的结构。。。。不过结构内的组成元素还是一样的。

源代码:
超级实验自己写头文件.rar (206.63 KB, 下载次数: 2)
高手多多锤锤。


今天感觉自己笨了好多。。。。。。。最后做的还是和以前一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 02:21:55 | 显示全部楼层
yipwing 发表于 2011-10-5 01:24
这个问题,是典型的多重定义了。。
你的结构体在main.c和save.h里面都有用到。。导致了重复。。
现在说预 ...

只能说,,,,兄台真的很厉害。。。。。。

感触很大。。。。也学到很多。。。

一眼就明了。。。
谢谢。

洗洗睡觉了,,,,,,晚安,鱼油们晚安咯!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 02:59:08 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-5 03:01 编辑
Y.H 发表于 2011-10-5 02:21
只能说,,,,兄台真的很厉害。。。。。。

感触很大。。。。也学到很多。。。

呵呵,希望对你有帮助,以前偶学C的时候也是这样,不过那时候偶都是自学的,没现在那么方便。。
现在偶打算重新学C,顺便学汇编。

学玩C++,写了些垃圾程序后,回头一看,原来偶还不懂的还有很多。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 09:41:47 | 显示全部楼层
头文件只放函数申明,不放函数体
包含头文件为了避免重复包含,需要宏定义避免重复包含
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 10:23:58 | 显示全部楼层
帮你改了下。
写文件的时候,因为有内存对齐在里面,所以写的数据其实和想的是不一样的,如果对齐不是一样的,那么写文件就不能偷懒,
if (1 !=  fwrite(&stu, sizeof(STUDENT), 1, fp))
这句要分开写,不能一次写一个结构。
对比文件内容和数据结构数据就知道了

超级实验自己写头文件Ex.rar (44.04 KB, 下载次数: 3)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 12:26:12 | 显示全部楼层
那个错误提示,是  你那个结构体,重定义了。
可以用尝试用预编译指令来解决

#ifdefine
#endif

之类的指令来解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 17:57:48 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-5 17:59 编辑

支持顶下收益匪浅,人多了什么方法都有哈哈!~版主这篇文章设为精华没问题吧同意的跟下吧哈哈!~活动活动嘎嘎!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 17:59:45 | 显示全部楼层
rover12421 发表于 2011-10-5 10:23
帮你改了下。
写文件的时候,因为有内存对齐在里面,所以写的数据其实和想的是不一样的,如果对齐不是一样 ...

支持顶下收益匪浅,人多了什么方法都有哈哈!~版主这篇文章设为精华没问题吧同意的跟下吧哈哈!~活动活动嘎嘎!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 18:34:11 | 显示全部楼层
嘿嘿。。。。。

肯定同意!{:2_27:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 21:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表