在我的工程中有一个头文件a.h内容如下
////
static DWORD USER_ID;
static char USER_NAME[15];
////
在b.cpp中改变USER_ID及USER_NAME的值后,
在c.cpp中发现USER_ID及USER_NAME没有改变.
为什么会这样?怎么解决?
////
static DWORD USER_ID;
static char USER_NAME[15];
////
在b.cpp中改变USER_ID及USER_NAME的值后,
在c.cpp中发现USER_ID及USER_NAME没有改变.
为什么会这样?怎么解决?
解决方案 »
- [源码]请教Navigate后,再OpenURL,发送出去网址中的中文参数为乱码
- 关于代码样式
- 关于沿两点间的直线运动的问题
- 关于动态库ImageLoad.dll
- 进程退出的清理问题
- DCOM中数组,指针传递问题?极度郁闷(高手请进,分不限)
- 请问如何在 Dialog 中,动态加载图片控件?
- mfc组合框问题
- 每当有人问及哪本书是学习C++的首选参考书时,好象很多人都会推荐《Thinking in C++》,所以我有几个问题想请教以下,请各位高手近来讨论:
- 请问如何用GetSelText来寻找richedit内容中的换行符?
- 一个关于文件读取的问题,提示“未找到命名文件“!
- 如何让CPPUNIT将测试结果输出到文本文
2.全局变量默认extern,可以省略.
如果b.cpp和a.cpp都include了a.h,那么编译单元b和编译单元c中便各自有了各自的USER_ID和USER_NAME,而且他们互相没有关系,互不影响。而假如把a.h中的static关键字去掉,那么编译单元b和编译单元c中便同时定义了同样的USER_ID和USER_NAME,此时他们是一样的,所以必将造成变量重复定义的编译时错误。正确的做法是在b.cpp或者c.cpp当中的一个文件里定义变量,不用static(否则就成了文件内部的,其他文件无法访问),而在另外一个cpp文件中使用extern引用他们。以上这些仅仅是在讨论全局static变量,类中的static变量与此不尽相同。
c.cpp里能够使用的方法呢.
呵呵,忘了extern的方法,如果在b.cpp中定义了
DWORD USER_ID;
char USER_NAME[33];
在c.cpp中怎么使用他啊,假如c.cpp中的
func()
{
//这里要使用USER_ID,这是c.cpp里的函数.
}
引用:<xxx书>
对于函数声明,extern是可选的,不带函数体的函数名连同参数表或返回值,自动作为一个声明.其实我觉得c++语法在编译器中有点不那么规范,尤其在vc++中.今天看了一本csdn的杂志,上面说在net2.0中vc++语法又有大变动,其中声明方法就变化了.
晕到
跟着跑,做火箭都赶不上啊!照这样下去vc++与c++可能会演变成vj++与java那种关系了.
func()
{
//这里要使用USER_ID,这是c.cpp里的函数.
extern DWORD USER_ID;
//下面就可以用USER_ID了
}
一般头文件就是声明东西的,而cpp文件是定义东西的。许多时候都是这样。更常用的方法是在一个cpp文件里定义一个变量,在某个头文件中做extern引用声明,然后其他所有的cpp文件只要include了这个头文件,便也引用这个extern。不能忘记“include”一个文件在很大程度上跟直接拷贝那个文件内容没有区别。
......
DWORD USER_ID;
char USER_NAME[33];
......
//c.cpp
extern DWORD USER_ID;
extern char USER_NAME[33];func()
{
//这里要使用USER_ID,这是c.cpp里的函数.
}