static 全局变量问题?求助!!!
在MFC程序下, 再*.H文件中Declare 一个指向一个类的对象指针, #include 到两个Cpp文件中,在一个文件中new, 然后再创建一个线程,但是这个线程中得到的指针为空。能让不同Cpp文件下的全局变量,为同一个值吗? 问题点数:50、回复次数:21Top
1 楼LocalVar(分乃身外之物,即使我回答对了,也别给分)回复于 2002-03-29 13:25:55 得分 10
首先不能用static变量(至于为什么,你去查一下c语言方面的书就行了)
然后
再.h文件中改为
extern PointerType* pPointer;
在你把它new出来的文件中
PointerType* pPointer;Top
2 楼AloneWolf(孤狼)回复于 2002-03-29 13:32:19 得分 10
全局变量一般在cpp文件中声明,在头文件中用
extern使该变量为外部变量,然后包含该头文件,
就可用该全局变量。可专门用Global.h和Global.
cpp来存放全局变量。Top
3 楼expert_zh(屁屁)回复于 2002-03-29 13:41:55 得分 10
全局变量已经存在于整个程序的life当中,
灭必要再用staticTop
4 楼DivXExtend()回复于 2002-03-29 14:09:07 得分 0
expert_zh(屁屁) ;有必要要不,#inlude之后,是两个不同的备份。Top
5 楼DivXExtend()回复于 2002-03-29 14:11:34 得分 0
问题没有解决!!!Top
6 楼EetyChen(三刀主)回复于 2002-03-29 14:18:29 得分 0
to DivXExtend():又见面了,世界是如此之小,是不是?!
照localvar说的就是了;static不能用于全局变量,是因为对于static修饰过的变量,只能实现“局部访问”--static=局部变量的生命期全局化Top
7 楼DivXExtend()回复于 2002-03-29 14:24:16 得分 0
EetyChen(三刀主): 那用Global行吗?Top
8 楼EetyChen(三刀主)回复于 2002-03-29 14:29:56 得分 20
//file c.cpp
#include "MyClass.h"
CMyClass myobject;
....
//file d.cpp
#include "MyClass.h"
extern CMyClass myobject;
......
你要的是不是这样的东东Top
9 楼cmpp()回复于 2002-03-29 15:08:24 得分 0
我来学习一下。Top
10 楼DivXExtend()回复于 2002-03-29 15:11:04 得分 0
我那个是指针,也不行。
//file c.cpp
#include "MyClass.h"
CMyClass *pmyobject;
;
....
//file d.cpp
#include "MyClass.h"
extern CMyClass *pmyobject;
......
你要的是不是这样的东东Top
11 楼DivXExtend()回复于 2002-03-29 15:11:57 得分 0
extern 应该在new 吗?Top
12 楼EetyChen(三刀主)回复于 2002-03-29 15:29:23 得分 0
如果是指针的话,extern处再new就变成新分配的内存地址了Top
13 楼DivXExtend()回复于 2002-03-29 15:31:02 得分 0
为啥?我还是的得不到值呢,多线程的原因吗?Top
14 楼EetyChen(三刀主)回复于 2002-03-29 15:37:23 得分 0
问题并不在于在extern处有没有new,对于全局变量,(仅)一处定义,(可以)四处声明,四处使用
CMyClass *myobject;//这是定义
extern CMyClass *myobject;//这是声明
myobject=new CMyClass;//这是使用
myobject->DoSomething(...);//这是使用Top
15 楼zzyy()回复于 2002-03-29 15:47:23 得分 0
static和extern修饰的对象存储在静态存储区内的,在main()还没有运行以前就已经初始化了.你的程序在静态对象初始化时还没有运行到实力化对象CMyClass当然得到的是空值啦Top
16 楼zzyy()回复于 2002-03-29 15:47:39 得分 0
static和extern修饰的对象存储在静态存储区内的,在main()还没有运行以前就已经初始化了.你的程序在静态对象初始化时还没有运行到实力化对象CMyClass当然得到的是空值啦Top
17 楼Atl_lover(狂风)回复于 2002-03-29 15:55:51 得分 0
EetyChen(三刀主):我也这么理解,但是就是得到空指针,在另一个Cpp文件(用extern申明的),它是一个线程过程,有挂你关系吗?Top
18 楼Atl_lover(狂风)回复于 2002-03-29 15:58:32 得分 0
:zzyy() ( ) :听来分析的头头是道,如何解决呢,不能在多个cpp中共享对象指针(不传参数)?Top
19 楼EetyChen(三刀主)回复于 2002-03-29 16:50:37 得分 0
怎么会把这么个问题弄成好象有多复杂一样(要么是你没有把自己所面临的问题完全阐述吧)Top
20 楼Atl_lover(狂风)回复于 2002-03-29 16:59:50 得分 0
EetyChen(三刀主) :好象挺简单可是。
本来就想,全局对象的指针.
可是, 在主线程中分配内存之后, 创建线程,如过这个线程的过程在同一个cpp中,没有任何问题,但是如果在另一个cpp中(当然用extern申明),全局对象指针在,线程过程中就为空?
就这么简单!但是....
Top
21 楼EetyChen(三刀主)回复于 2002-03-29 17:30:33 得分 0
可以发过来让我看看吗
我以前碰到过无效值的全局变量问题,不过跟你刚好相反Top
22 楼DivXExtend()回复于 2002-03-29 17:35:37 得分 0
EetyChen(三刀主):我解决了,那个问题是,我在那个Cpp文件中,另一各类的初始化时,初始化这个全局变量位空。谢谢关心。Top




