有两个类01.h文件
----------------
class a
{
public:
  void st();
};02.h文件
----------------
class b
{
public:
  int mm;
};01.cpp文件
----------------
include "2.h"
void a::st()
{
????????????请问a类中如何访问b类的mm成员变量??
};将int mm声明为static可以解决 但是 在关闭01文件的时候 再打开 int mm的值还是会存在 所以 请不要用static静态声明来解决此问题.

解决方案 »

  1.   

    b类的mm成员变量,如果还没有用类生成对象,那当然不行啦。或者提供一对函数
    Get()
    Set()void a::st(b bVar)
    {
     bVar.Set(XX);
    };
    ???????????
      

  2.   

    void a::st(b &bVar)
    {
     bVar.Set(XX);
    };
    ???????????疏忽了
      

  3.   

    mm不是public属性的吗?
    不就是为了让别人直接访问的吗?
      

  4.   

    我要直接用类访问 而不用对象访问
    问题是如何访问 如果我生成了static int mm;
    则可以用b::mm;来访问此成员变量.如果不能声明为静态变量 还能用什么方法?上面说到的友员怎么解释?
      

  5.   

    楼主,我明白你的意思了,你希望通过类命名空间来访问一个类中的int型的数据对吗?
    一个类的成员变量如果不基于这个类的实例(对象),那么它的意义是什么呢?我觉得是这样的,你能否说一下你的最初的需求?
      

  6.   

    对的 谢谢楼上的这么耐心 我其实是把问题简化说了一下 除了想知道类怎样直接访问成员变量外 问题原型是这样的:有两上窗体 是用VC++编译器创建的.
    01.h 01.cpp是01窗体中的类 就是用VC中的classwizard自动生成的窗体类 不过我不用说太详细你也能知道
    然后就是02窗体生成的类可以访问01窗体01.h中class 01中声明的数据成员 怎样能做到?并不是单纯的想访问01窗体的数据 而是一定要访问在01.h中class 01类中的数据成员.
      

  7.   

    首先,有几个地方你必须明确:
    1. 窗体类必须实例化后才能表达真正的windows窗口.
    2. 窗体类中的成员变量也只有在该类的实例中才具有意义.
    3. 你必须明白,类只是模型,只有针对具体对象的时候这样的模型描述才有意义.
    既然是窗体,有很多方法可以访问其成员:
    1. 你可以通过窗口间的消息互发来实现.
    2. 你可以通过一个指向窗口实例的窗口类指针来实现成员的访问.
    具体方法很多,但是你必须记住的是直接使用b::mm的方式很多时候其实访问未初始化的变量
      

  8.   

    明白 说得很能让人理解 也许我猜发消息的方式我可以做得到
    但是 窗体类的实例对象怎么得到?你说的第二种方法.我比较想学习下.还有就是 我关闭了窗体01之后 为什么再调用的时候 它的数据成员值还存在?
    调用方法为:
    02.cpp
    include "01.h"
    01 dlg;
    dlg.DoModle();
    当显示了01窗体 我关闭后 再调用 我发再值不会重新初始化 还存在 为什么?
      

  9.   

    这个我清楚.我现在就是想知道 关闭了窗体后 再次调用的话 那个窗体的类的数据成员值还是以前的?
    这么说 当我 01 dlg;的时候 dlg就是这个窗体的实例了???
    也就是说dlg.mm就可以???
    我试下看.
      

  10.   

    domodel将会让你的进程block在dlg窗体的消息循环中,你如果试图在dlg.domodel后再用dlg.mm,这样的操作也是无效的