QT中使用全局变量的方法求解答!!!急

大板牙花生 2011-01-21 11:42:27
好几天了。我按照C++的标准,在头文件中加入了
extern int var_name;
而且在CPP文件里面也引用了头文件。但是在类的槽函数定义中却不能使用全局变量。我已经在一个函数中对全局变量进行了初始化,但是依然报错。function_name_1()和function_name_1()都是声明的PUBLIC SLOTS。编译的时候说function_name_2()中的变量没有初始化。然后运行的时候就报RUN TIME的错,比较诡异,是VC++报的错。QT在DEBUG的时候提示的是
HEAP[maintest.exe]:
Invalid allocation size - A8444118 (exceeded 7ffdefff)
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

QWaitCondition: Destroyed while threads are still waiting

源代码:
extern int var_name ;
void MainWindow::function_name_1()
{
int var_name;
var_name=1;
};
void MainWindow::function_name_2()
{
// int var_name;不管是否定义这个都会出错!!!
//先调用函数function_name_1()后再调用function_name_2()
some_other_function(var_name);
};
...全文
1940 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ty_jiang 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pcsuite 的回复:]

可以直接在一个.cpp中定义一个全局变量int i;然后在另一个.cpp中使用extern int i;到处都可用。
[/Quote]
正解
qter_wd007 2011-06-23
  • 打赏
  • 举报
回复
尽量少用全局变量。
实在需要,可以在.cpp中定义。
donwmufromdying 2011-06-22
  • 打赏
  • 举报
回复
在C++中还有这样用全局变量的? 我一般都把全局变量定义到类的公共静态变量去。这样也不会污染名字空间
zhaoli_1956 2011-06-22
  • 打赏
  • 举报
回复
extern int var_name ;
void MainWindow::function_name_1()
{
int var_name;
var_name=1;
};

extern说明var_name变量已经在别的文件中定义了,直接拿来用即可,你又在此文件中重新定义
int var_name;
var_name=1;

不知道说什么好了
暗黑小白 2011-06-18
  • 打赏
  • 举报
回复
1楼的方法可行
开始领悟 2011-06-18
  • 打赏
  • 举报
回复
建议把全局变量定义在单独的文件中
petter_nie 2011-06-15
  • 打赏
  • 举报
回复
qt3似乎都是在一个.h的文件中写
cymurs 2011-06-15
  • 打赏
  • 举报
回复
3楼说的对,我已经屡试不爽了
  • 打赏
  • 举报
回复
全局变量可以声明多次,但只能定义一次,extern的意思是这个变量可能是在外部文件定义的

只要遵循这个规则,怎么搞都成,能杀死牛的刀才是牛刀
俊涛 2011-01-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kyleven 的回复:]
引用 1 楼 yangglemu 的回复:
在一个头文件中声明int var_name全局变量,在另一个cpp文件中引用此变量: extern int var_name;指出var_name是在外部文件定时的变量,编译器会自动在所有文件中查找var_name的定义,如:
aaa.h:
C/C++ code

#ifndef AAA_H
#define AAA_H
int var_na……
[/Quote]
但是如果只是在头文件加extern声明,在外面也还是需要定义的啊
俊涛 2011-01-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangglemu 的回复:]
在一个头文件中声明int var_name全局变量,在另一个cpp文件中引用此变量: extern int var_name;指出var_name是在外部文件定时的变量,编译器会自动在所有文件中查找var_name的定义,如:
aaa.h:
C/C++ code

#ifndef AAA_H
#define AAA_H
int var_name;
#endif // AAA_H

……
[/Quote]
1楼在头文件中定义了全局变量,并且main函数所在文件#include "aaa.h",那不管用不用extern int var_name声明,var_name都可见吧
BuleRiver 2011-01-23
  • 打赏
  • 举报
回复
使用全局变量,破坏了程序的封装,为什么要使用啊?
dbzhang800 2011-01-21
  • 打赏
  • 举报
回复
楼主提到的头文件加入 extern 是对的,但是,后面的代码就是错的厉害了。

一楼的可以参考,只不过应该将 extern 从 .cpp 文件挪到 .h 文件中。

题外:建议找本C++或C的书先看看
chenzhp 2011-01-21
  • 打赏
  • 举报
回复
楼上的方法可以一试
  • 打赏
  • 举报
回复
在一个头文件中声明int var_name全局变量,在另一个cpp文件中引用此变量: extern int var_name;指出var_name是在外部文件定时的变量,编译器会自动在所有文件中查找var_name的定义,如:
aaa.h:

#ifndef AAA_H
#define AAA_H
int var_name;
#endif // AAA_H

main.cpp:

#include <QtCore/QCoreApplication>
#include "aaa.h"
#include <qdebug.h>
extern int var_name;//只需导入即可,不可再定义
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<var_name;//全局整形变量会赋默认值0
return a.exec();
}
大板牙花生 2011-01-21
  • 打赏
  • 举报
回复
,问题找到了。 我多在function_name_1()多定义了int var_name了,去掉就没有问题了。。。
pcsuite 2011-01-21
  • 打赏
  • 举报
回复
可以直接在一个.cpp中定义一个全局变量int i;然后在另一个.cpp中使用extern int i;到处都可用。
在水一方 2011-01-21
  • 打赏
  • 举报
回复
对着的,就是应该在h文件中添加extern,顶一下楼上的

21,494

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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