请教namespace的连接问题

michael122 2011-02-19 10:42:55
如果一个工程中,定义如下三个文件:
//a.h
namespace X{
int i;
}

//b.cpp
#include "a.h"
int main(){}

//c.cpp
#include "a.h"

这样连接出错,X::i多重定义。
如果要多个编译单元共享同一个X::i,怎么解决?
...全文
112 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hqin6 的回复:]

引用 7 楼 michael122 的回复:

谢谢各位,基本功不扎实了。。
真不扎实!!!为啥不用宏定义呢??#ifndef 是干嘛用的????!!!!!!
[/Quote]
这个地方,ifndef确实不好使。。。
mstlq 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 healer_kx 的回复:]
引用 8 楼 hqin6 的回复:

引用 7 楼 michael122 的回复:

谢谢各位,基本功不扎实了。。
真不扎实!!!为啥不用宏定义呢??#ifndef 是干嘛用的????!!!!!!

这个地方,ifndef确实不好使。。。
[/Quote]
q上问过那鸟楼主……
鸟楼主为了用最小的重现错误,把所以无关代码都删掉了,包括ifndef,写了本帖的版本……
太乙 2011-02-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 michael122 的回复:]

谢谢各位,基本功不扎实了。。
[/Quote]真不扎实!!!为啥不用宏定义呢??#ifndef 是干嘛用的????!!!!!!
michael122 2011-02-19
  • 打赏
  • 举报
回复
谢谢各位,基本功不扎实了。。
healer_kx 2011-02-19
  • 打赏
  • 举报
回复
//a.h
namespace X{
int i;
}

是不是应该改成:


//a.h

#ifndef _a_h_
#define _a_h_

namespace X{
int i;
}

__declspec(selectany) int i = 0;
#endif


michael122 2011-02-19
  • 打赏
  • 举报
回复
解决了

//a.h
namespace X{
extern int i;
}

//a.cpp
include "a.h"
int X::i=0;

//b.cpp
#include "a.h"
int main(){}

//c.cpp
#include "a.h"
太乙 2011-02-19
  • 打赏
  • 举报
回复
把a.h改为:

#ifndef _A_H
#define _A_H
namespace X{
int i;
}

#endif
taodm 2011-02-19
  • 打赏
  • 举报
回复
extern
楼主还没搞清楚变量的声明和定义的区别,基本功需要补补了。
mstlq 2011-02-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080908/21/0B8F0FA4-7DDA-486C-B24C-0A6B52FF7E2E.html
直接从上帖子6楼拷贝的,楼主可以参考
mstlq 2011-02-19
  • 打赏
  • 举报
回复
如果是一个工程,多个源文件,那么如果在1.cpp中定义 int x; 如果2.cpp要访问它怎么办呢? 一般是 在头文件1.h中声明:extern int x;
在2.cpp中使用#include "1.h",这样就避免重复定义,因为int x是定义,为x分配了内存空间,extern int x 只是纯声明,不分配内存空间

如果3.cpp文件要使用,也可以include,反正在这个项目中x只被定义了一次,却声明了多次。


65,192

社区成员

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

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