VC真烦,我想把我的全局变量做到一个h 文件中去,搞不定,我烦我烦我烦烦烦,还是vb好

zyq654321 2001-12-18 10:51:10
2 我的myglobal.h是这样的
#ifndef _global_h
#define _global_h
int g_v1;
#endif

我想得美,在想用g_v1时#include "myglobal.h",可是没那么好的事,一个地方#include "myglobal.h" 行,两个地方就不行了
...全文
1232 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2001-12-25
  • 打赏
  • 举报
回复
唉.这东西是一点就明的,不管是学C++,或C或PASCAL,,甚至BASIC..
这变量的定义和声明,内存的分配,居然纠缠不清了这么久.
少些浮躁吧,朋友们,这样可以少绕些弯路.


别再#include"XXX.cpp" 之类了.
别再在头文件中定义变量了..
别再编译通过一次便觉得万事大吉,编译通不过则骂编译器破...
...
zcj_csdn 2001-12-23
  • 打赏
  • 举报
回复
在vc中,只能够定义一次,却可以声明多次
因此在.h文件中定义是不对的。应该在其内声明才对:
myglobal.h文件:
#ifndef _global_h
#define _global_h
……
extern int g_v1;
……
#endif
myglobal.cpp文件:
……
int g_v1;
……

bluecrest 2001-12-23
  • 打赏
  • 举报
回复
我的全局变量这样设置的
gobal.h

extern int myvar;

在my.cpp中(第一次用时)
#include "gobal.h"
int myvar;
以后在其他文件
只要#include "gobal.h"
直接用就行了
babytiger 2001-12-23
  • 打赏
  • 举报
回复
学习学习,upup
tianzhong78 2001-12-23
  • 打赏
  • 举报
回复
就是就是,我也爱vb
winthegame 2001-12-22
  • 打赏
  • 举报
回复
to wwwsq(wwwsq) theApp 是什么?必要时也要用全局变量的,用extern声明就好了嘛,有那么麻烦?
wwwsq 2001-12-22
  • 打赏
  • 举报
回复
强烈反对使用全局变量,万不得已也该放到CYourApp中去。以后
((CYourApp*)AfxGetApp())->g_nCount = 0;
sorry2000 2001-12-22
  • 打赏
  • 举报
回复
Colorstone(仁者无敌)的方法才是正确的方法!
yarao 2001-12-21
  • 打赏
  • 举报
回复
thomas269(Thomas),你的解法才应该是正招,比较专业。
tangt 2001-12-21
  • 打赏
  • 举报
回复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~其他言论~~~~~~~~~~~~~~~~~~~~
各位,我在当时遇到这个问题的时候有这样一个想法.在头文件里声明全局变量,这和接口技术符合吗?我最终还是选用接口,方法.这样程序至少可读性会好一点.今天连com都快过时了,我们的代码技术,是不是该改改方向了
bzshow 2001-12-21
  • 打赏
  • 举报
回复
我是这样定义的。
#ifndef _PUBVAR__H

#define _PUBVAR__H

#ifndef DEFVAR
#define DECLARE extern
#else
#define DECLARE
#endif

DECLARE char PubDataPath[256];
DECLARE int PubCount;
DECLARE float TestFoo;

#endif
auto_lu 2001-12-21
  • 打赏
  • 举报
回复
我来回答这个问题,因为我也碰到过。并且解决了!! 一定要给分的哟!!!
不过是把“如风”---徐龙桥的改一改。
//Your head file MyGlobal.h
#ifndef MY_HEAD_FILE
#define MU_HEAD_FILE
//比如:
int myvalue1;
float myvalue2;
double myvalue3;
CString strValue4; //这儿都不需要extern的
....
#endif

也不需要h对应的cpp文件,这个头文件只要包涵在任一使用它的文件中。当然你把包在stdafx.h中也行。(只被包涵一次就够)


然后在你用到这些变量的任何文件的“开始”(当然是cpp中了),声明为extern

比如:
extern int myvalue1;
extern float myvalue2;
等等。
如果还达不到你的要求,我就是连几岁的小孩子都不如了。
lwg7603 2001-12-21
  • 打赏
  • 举报
回复
在stdafx.cpp中:
int g_v1;
在stdafx.h中:
extern int g_v1;



添加一个myglobal.cpp文件,并#include "myglobal.h",再在此文件中声明:
int g_v1;
在myglobal.h中:
extern int g_v1;


xuwm 2001-12-21
  • 打赏
  • 举报
回复

/***********************************/

楼上的//iyacht(驼铃声声)//老兄:耳听为虚,言见为实,我在vc上试验过了!
你尽可以尝试一下。

不要把一些事情复杂化,C++并没有这么多的清规戒律!

auto_lu 2001-12-21
  • 打赏
  • 举报
回复
至少
iyacht 2001-12-21
  • 打赏
  • 举报
回复
学过基础的C语言没有?
xuwm 2001-12-21
  • 打赏
  • 举报
回复
/**********************************************************************/

对于这个问题,这么多人参与讨论,说明这是一个C++编程初学者比较困惑的问题。
其实,只要这么理解就非常简单!在C/C++的源文件(*.c,*.cpp)中定义的函数或变量,只要它是位于函数以外(不管是类函数或者普通函数),那么就具备文件作用域,其他模块都可以使用它。只要在使用前面声明一下就可以了。
使用头文件进行声明只是一种方式,还有另外一种方式:
/* a.cpp */
void a(void)
{
...
}

/* b.cpp */
void b(void)
{
...
extern void a(void);
a();
...
}


findwe 2001-12-21
  • 打赏
  • 举报
回复
还没搞定??
用我的办法肯定型/
我是过的/
dou_ya 2001-12-21
  • 打赏
  • 举报
回复
你必须有一个 ***.cpp 文件中初始化一次!
并且只能初始化一次!!!!




int g_v1 = 0;



听我的准没错,我就碰到过这样的问题!!!










liugy 2001-12-21
  • 打赏
  • 举报
回复
是不是搞工程的呀。。。。

定义两个头文件:var.h, externVar.h
在 var.h 中定义变量 如 int nVar; 只include "var.h" 一次
在 externVar.h中定义 extern int nVar; 其他地方用 include "externVar.h"

我做工程就是这样的。相信我没错。
加载更多回复(45)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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