返回信息流在研究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
总之就是两个对象变量名希望用一样的。。。
都是啥原理,怎么解决呢。。多谢多谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #19745同步于 2009/3/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
弱问一个链接错误, 关于变量重复定义...
Andier
2009/3/2镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
琢磨出来了,要在cpp文件里定义变量的时候再用extern。。。晕。。。
那如果我所有对象都用一套变量,每个里面定义的时候都要 extern
这样共享一个存储位置的时候会不会出什么问题呢。。。
需要解释。。。
最好的方法是
#ifndef xxx
#def xxx
xxxx
#endif
【 在 Andier (La.is.la.bonita) 的大作中提到: 】
: 琢磨出来了,要在cpp文件里定义变量的时候再用extern。。。晕。。。
: 那如果我所有对象都用一套变量,每个里面定义的时候都要 extern
: 这样共享一个存储位置的时候会不会出什么问题呢。。。
: ...................
这个和lz的问题无关
#ifdef在作用只是限定在同一个编译单元里xxx被声明一次.
lz的问题是链接时xxx重复定义.
在c里,int a;算声明不算定义,但在c++里不行. 所以为了避免混淆,不要在头文件里写
int a;这种东西
【 在 white127 (瓜牛) 的大作中提到: 】
: 最好的方法是
: #ifndef xxx
: #def xxx
: ...................