全局变量奇怪的问题

namewchlp 2009-08-23 03:28:31
建了一个form框架 在form1.h文件中定义一个全局变量(不知道是否可以?)
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#pragma once
std::vector <int > numer;//============全局 的vector 数组变量numer

namespace zedd{..........}

在namespace zedd{}里面一个函数 有对 全局数组 number的操作 (如下)
private: System::Void listbox_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
numer.push_back(4); // 断点追踪显示 numer的元素个数增加了 但每个元素都是0,即 numer[0]的值为0
.......
}

这个是为什么? 是不是不能这样定义全局变量? 如果这样不是全局变量,但至少是个可操作的变量 为什么不能push数进去呢?
如何在form中定义全局变量呢?
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
namewchlp 2009-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
引用 3 楼 namewchlp 的回复:
引用 2 楼 tr0j4n 的回复:
#include "stdafx.h"
  #include   <iostream>
  #include   <fstream>
  #include   <string>
  #include   <vector>
  #pragma once
  using namespace std;


  vector   <int > numer;//============全局 的vector  数组变量numer

  namespace zedd{..........}


  这样一定可以你的zedd里面不认识number


认识的   在zedd里写 number 还是认识的   请看清帖子,在zedd里的函数对number操作 还是有变化的
只是  结果很奇怪

假设你的这个文件名为zedd.h
zedd名字空间中的函数当然可以使用number变量。
但是,在其他的文件中#include "zedd.h",这样会将numer声明了两次。
其他文件中使用的numer变量不一定是你在zedd.h文件中使用的变量number。
解决办法,在cpp文件中定义变量number,在zedd.h文件中externvector  <int > numer;
[/Quote]

我在cpp中定义 了std:vector<int > numer; 然后在zedd.h文件中
extern std:vector<int > numer;


结果还是一样 对numer push操作时 只增加元素 不赋值
wltg2001 2009-08-23
  • 打赏
  • 举报
回复
楼主是不会定义全局变量,全局变量是不能定义在头文件中的,只能定义在CPP文件中,在头文件中用extern 声明一下.如果将变量定义在头文件中,那么包含头文件的每个CPP文件相当于都定义了一个变量,不过这个变量的生命周期仅是在这个CPP文件中.
不要忘了,头文件的作用是仅是在编译时,将头文件的内容替换进CPP文件而已.
  • 打赏
  • 举报
回复
定义的位置错了
雪影 2009-08-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 namewchlp 的回复:]
引用 2 楼 tr0j4n 的回复:
#include "stdafx.h"
#include  <iostream>
#include  <fstream>
#include  <string>
#include  <vector>
#pragma once
using namespace std;


vector  <int > numer;//============全局 的vector  数组变量numer

namespace zedd{..........}


这样一定可以你的zedd里面不认识number



认识的  在zedd里写 number 还是认识的  请看清帖子,在zedd里的函数对number操作 还是有变化的
只是  结果很奇怪
[/Quote]
假设你的这个文件名为zedd.h
zedd名字空间中的函数当然可以使用number变量。
但是,在其他的文件中#include "zedd.h",这样会将numer声明了两次。
其他文件中使用的numer变量不一定是你在zedd.h文件中使用的变量number。
解决办法,在cpp文件中定义变量number,在zedd.h文件中extern vector <int > numer;
namewchlp 2009-08-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tr0j4n 的回复:]
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#pragma once
using namespace std;






























































vector <int > numer;//============全局 的vector  数组变量numer

namespace zedd{..........}


这样一定可以你的zedd里面不认识number
[/Quote]



认识的 在zedd里写 number 还是认识的 请看清帖子,在zedd里的函数对number操作 还是有变化的
只是 结果很奇怪
MoXiaoRab 2009-08-23
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#pragma once
using namespace std;

vector <int > numer;//============全局 的vector 数组变量numer

namespace zedd{..........}


这样一定可以你的zedd里面不认识number
wltg2001 2009-08-23
  • 打赏
  • 举报
回复
全局变量不要在头文件中定义,一般都是在CPP文件中定义,在头文件中extern 声明一下。

16,551

社区成员

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

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

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