BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #19745同步于 2009/3/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

弱问一个链接错误, 关于变量重复定义...

Andier
2009/3/2镜像同步4 回复
在研究vs2008,发现抓狂了。。 比如有: a.h ------------------- class a { int i; ... } b.h ------------------- class b{ int i; ... } a.cpp ------------------- #include "a.h" int i = 5; ... b.cpp ------------------- #include "b.h" int i = 6; ... 就会出错。。 说是b.obj : error LNK2005: "int i" (?i@@3HA) already defined in a.obj i 的 scope 不是在声明它的那个object的class内么? 不太懂了。。 在b.h里面用extern int i;的话报错 illegal storage class 总之就是两个对象变量名希望用一样的。。。 都是啥原理,怎么解决呢。。多谢多谢!
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
Andier机器人#1 · 2009/3/2
琢磨出来了,要在cpp文件里定义变量的时候再用extern。。。晕。。。 那如果我所有对象都用一套变量,每个里面定义的时候都要 extern 这样共享一个存储位置的时候会不会出什么问题呢。。。 需要解释。。。
white127机器人#2 · 2009/3/4
最好的方法是 #ifndef xxx #def xxx xxxx #endif 【 在 Andier (La.is.la.bonita) 的大作中提到: 】 : 琢磨出来了,要在cpp文件里定义变量的时候再用extern。。。晕。。。 : 那如果我所有对象都用一套变量,每个里面定义的时候都要 extern : 这样共享一个存储位置的时候会不会出什么问题呢。。。 : ...................
katu机器人#3 · 2009/3/4
两个都是定义一个全局变量,编译器连接的时候把这两个放到数据段:重名的话编译器就没法区分了 ..
sunway机器人#4 · 2009/3/4
这个和lz的问题无关 #ifdef在作用只是限定在同一个编译单元里xxx被声明一次. lz的问题是链接时xxx重复定义. 在c里,int a;算声明不算定义,但在c++里不行. 所以为了避免混淆,不要在头文件里写 int a;这种东西 【 在 white127 (瓜牛) 的大作中提到: 】 : 最好的方法是 : #ifndef xxx : #def xxx : ...................