关于作用域

GhostAdz 2003-08-18 07:33:14
struct S1{int a;char b;};

struct S1{int a;char bb;};
分别在两个不同的文件里
vc下编译是对的,可书上说是错的
因为结构和类只能有一种唯一的定义
不知道为什么
还有一般类的定义放在头文件好
还是cpp文件好呢
...全文
39 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbh0360 2003-08-23
  • 打赏
  • 举报
回复
一楼分析的很正确
金笛子 2003-08-23
  • 打赏
  • 举报
回复
先看看作用域是什么吧
GhostAdz 2003-08-23
  • 打赏
  • 举报
回复
那两个是.cpp文件啊 不是头文件
只是一起编译呀
就象 int a;和int a=9;是两个.cpp文件里的一样呀
hunter0912 2003-08-21
  • 打赏
  • 举报
回复
引用的时候把那两个头文件包含到一起的话就会报错了
否则不报错
VC++7
leialen 2003-08-21
  • 打赏
  • 举报
回复
结构和类都放在头文件里定义比较好。但现在两个文件用是可以的,包含在一起时会有冲突的,叫重复定义。我们先要了解编译器要做的工作范围是什么。
leialen 2003-08-21
  • 打赏
  • 举报
回复
定义结构和类的时候系统没有为之分配内存,当用结构或类定义对象的时候才分配了空间。
int a = 6;
int a = 9;
出错就是内存里有一个地方已经分配给int a = 6;了,会有冲突。
GhostAdz 2003-08-21
  • 打赏
  • 举报
回复
真的没人知道吗
GhostAdz 2003-08-19
  • 打赏
  • 举报
回复
up myself
GhostAdz 2003-08-19
  • 打赏
  • 举报
回复
这两个结构不相同吧书上说违反ODR
One-Definition Rule单一定义规则
比如我在两个文件里分别定义
int a=9;和int a=6;
就会报错啊
可是为什么结构不报呢
GhostAdz 2003-08-19
  • 打赏
  • 举报
回复
定义没放在头文件里
分别放在两个cpp里
书上也是说这样是错的
但是我的编译器没报(struct S)
vc 6.0
caomuyong1 2003-08-19
  • 打赏
  • 举报
回复
定义放在头文件好一些吧
实现放在CPP中好一些,这是软件工程的最低访问权限原则
imeng99 2003-08-19
  • 打赏
  • 举报
回复
你在引用的时候把那两个头文件包含到一起了吗?如果这样的话,就会报错了。
GhostAdz 2003-08-19
  • 打赏
  • 举报
回复
up
playboyxp 2003-08-18
  • 打赏
  • 举报
回复
vc是一个开发环境,编译器不是标准的
johnxk 2003-08-18
  • 打赏
  • 举报
回复
楼上的楼上已经分析的很透彻了!
minghui000 2003-08-18
  • 打赏
  • 举报
回复
路过UP一下
grail0922 2003-08-18
  • 打赏
  • 举报
回复
这其实是两个完全相同的struct
放在不同的文件里面可以通过;
但在引用时,#include 了谁就使用谁。

类的定义一般放在.h文件中,实现放在.cpp文件中,主要是为了使用的方便。struct一般只是定义各种数据,放在哪里都无所谓。

但模板类不是的,它的声明和实现放在一个文件里面一般是头文件里面。因为它在编译时没有固体的类型,分开的话,会找不到实现。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧