一个关于类在声明时就创建对象的问题

吱吱吱吱涵 2015-07-30 04:56:10


如上图,在类声明时就创建了一个对象。
问题是,当该头文件被其他文件包含时,就会产生重复定义对象的错误。
何解?
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二班的码农 2015-07-31
  • 打赏
  • 举报
回复
把 class Sales_staff_list{ ... }S; 改成 class Sales_staff_list{ ... }; extern Sales_staff_list S; //只是声明 在某个cpp中,对其实例化,如在xxx.cpp中 #include "xxx.h" //包含类的头文件 Sales_staff_list S ; //在函数体外 然后在其它cpp文件中,只要#include "xxx.h" , 就可访问S
吱吱吱吱涵 2015-07-30
  • 打赏
  • 举报
回复
引用 5 楼 ant2012 的回复:
非得这样定义吗? 将其定义成extern 全局变量 在类的声明之后加 extern 类名 对象名; 只要有一个cpp文件对其进行定义,其它cpp文件只要加载类的头文件,都可以访问它
没看明白,您能详细说一下吗
二班的码农 2015-07-30
  • 打赏
  • 举报
回复
非得这样定义吗? 将其定义成extern 全局变量 在类的声明之后加 extern 类名 对象名; 只要有一个cpp文件对其进行定义,其它cpp文件只要加载类的头文件,都可以访问它
苏叔叔 2015-07-30
  • 打赏
  • 举报
回复
S是全局变量
勤奋的小游侠 2015-07-30
  • 打赏
  • 举报
回复
你没有搞清楚编译和链接过程。 编译过程,每个文件都定义一个同名变量是不会报错的. 但是,连接过程中,要将所有编译好的obj文件连接成一个exe文件。这样你每一个cpp里面都有一个同名变量,在链接时链接器就搞不清楚要用那一个了。所以会报错。 所以,你不能将这个S放在头文件里面定义,而是要移到其它的cpp文件里面。其它的地方要用时加上extern关键字声明S是在其它地方定义的。
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
没有用#ifdef来防止多次包含头文件吗?
mewiteor 2015-07-30
  • 打赏
  • 举报
回复
#ifndef _HEADER_
#endif
包住

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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