访问全局变量的问题

icewn 2003-10-15 02:30:20
我在主窗口定义一个全局变量a,a定义在头文件中,现在做一个登录窗口,登录窗口主程序cpp文件中new出来,并用showmodal显示,此时 登录窗口不能再访问主窗体定义的全局变量,该怎么解决,
主程序cpp文件如下:
#include <vcl.h>
#include "Login.h"
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", MainForm);
USEFORM("DM.cpp", MD); /* TDataModule: File Type */
USEFORM("Login.cpp", LogForm);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();

TLogForm *LogForm = new TLogForm(Application);
try
{
if (LogForm->ShowModal() !=mrOk)
{
delete LogForm;
return 0;
}
}
catch(...)
{
delete LogForm;
}
delete LogForm;
Application->CreateForm(__classid(TMD), &MD);
Application->CreateForm(__classid(TMainForm), &MainForm);

Application->Run();

}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}

return 0;
}
//---------------------------------------------------------------------------
因为,登录窗口是在主窗口创建之前new出来的,访问主窗口的变量会出现内存泄漏,如果是在登录窗口,new主窗口,可以访问,因为是new出来的,地址不同,所以delete后,根本不能改变主窗口的变量的值,向各位兄弟姐妹求教
...全文
43 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwuzhao 2003-10-18
  • 打赏
  • 举报
回复
无聊
佣工7001 2003-10-17
  • 打赏
  • 举报
回复
完全不用全局变量是可笑的
myredsun 2003-10-17
  • 打赏
  • 举报
回复
去看一下extern的用法
penu 2003-10-17
  • 打赏
  • 举报
回复
少用全局变量。
实在要用就加extern申明。
yjy1001 2003-10-17
  • 打赏
  • 举报
回复
同意 Wingsun(孙春阳) 的做法
最基本的使用……
wuhuar 2003-10-17
  • 打赏
  • 举报
回复
同意 Wingsun(孙春阳)
ljianq 2003-10-17
  • 打赏
  • 举报
回复
你那个所谓的全局变量到底是TMainForm的成员还是真的全局变量?

如果是TMainForm的成员,则可以:
将Application->CreateForm(__classid(TMainForm), &MainForm);放在登录窗口创建前;

如果是真的全局变量,最好采用TopCat(令狐虫)的意见。
TopCat 2003-10-17
  • 打赏
  • 举报
回复
为什么不修改你的LoginForm的构造函数,把a作为参数传递进去呢?不推荐使用全局变量
LanceX 2003-10-17
  • 打赏
  • 举报
回复
支持Wingsun(孙春阳)老大!
lanren_me 2003-10-15
  • 打赏
  • 举报
回复
把LogForm放到
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{

LOGSYS();.....//放到这里;
}
Wingsun 2003-10-15
  • 打赏
  • 举报
回复
在MainForm.cpp定义:
int a;
在Project1.cpp中定义:
extern int a;
这样就可以了。
也就是在需要用到的地方只要定义为:
extern int a;即可。
netsys2 2003-10-15
  • 打赏
  • 举报
回复
把全局变量a放在LogForm.cpp或者project1.cpp中!

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧