CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

static 全局变量问题?求助!!!

楼主DivXExtend()2002-03-29 13:17:35 在 VC/MFC / 基础类 提问

在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

相关问题

  • 全局变量
  • 全局变量!!
  • 全局变量
  • 全局变量?
  • 全局变量
  • 全局变量
  • c语言中Static 变量与全局变量有什么区别?
  • static 全局变量的问题,如果在一个程序里使用多个全局变量会~~~~~~
  • 全局变量声明成static有意义吗?
  • 全局变量加static和不加有什么区别?

关键词

  • 指针
  • 文件
  • 线程
  • cpp
  • 变量
  • 全局
  • cmyclass
  • 初始化
  • eetychen
  • 对象

得分解答快速导航

  • 帖主:DivXExtend
  • LocalVar
  • AloneWolf
  • expert_zh
  • EetyChen

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo