为了实现两个类之间的数据问题,俺设计了一个接口类InterFace,
其中有两个成员函数,如下所示//用来给接口类的私有变量CString string 赋值
SetValue(CString& str)
{
    string=str;
}
//用来取出接口类中的私有变量CString string即:
GetValue(CString& str)
{
    str=string;
}现在,在类A中调用接口类成员函数SetValue(CString& str)给string赋值
      在类B中调用接口类成员函数GetValue(CString& str)取出接口类的私有成员变量string
可是取出的结果是空字符串,而不是在类A中所赋值的字符串,请问这是怎么回事??

解决方案 »

  1.   

    happyparrot(快乐鹦鹉):是你为类A和B各自定义了一个实例吧!!
    是的呀,那怎么解决呢??
      

  2.   

    我说了,将这个接口中的私有变量都定义为静态的吧。
    static string;
    这样的话,所有接口类的实例都共享这一个静态内存中的数据了。
      

  3.   

    //Myinterface.hclass Myinterface
    {
    private:
    Static CString string;
    public:
    SetValue(CString& str);
    GetValue(CString& str);
    };
    //Myinterface.cpp
    #include "stdafx.h"
    #include "Myinterface.h"Myinterface::GetValue(CString& str)
    {
    str=string;
    }Myinterface::SetValue(CString& str)
    {
    string=str;
    }
    //在类MyDialog1中调用 SetValue(m_Staion);
    void MyDialog1::OnButton1() 
    {
    UpdateData();
             Myinterface myinterface;
    myinterface.SetValue(m_Staion);//m_Staion为控件IDC_EDIT1变量
    }
    //在类MyDialog2中调用 SetValue(m_Staion);
    void MyDialog2::OnButton1() 
    {
             Myinterface myinterface;
             CString str;
    myinterface.GetValue(str);//m_Staion为控件变量
             MessageBox(str);
    }
    俺都贴出来了呀!happyparrot(快乐鹦鹉)可以帮俺看一下吗?
      

  4.   

    俺是听了你再定义成静态的!
    可是:
     error LNK2001: unresolved external symbol "private: static class CString  Myinterface::string" (?string@Myinterface@@0VCString@@A)
      

  5.   

    static int n;是正确的
    static CString string;确是错误的,为什么?
    是不是因为CString是一个类呢?
    那怎样解决?
      

  6.   

    static用小写!!!!不是Static!!!!!
      

  7.   

    怎么可能呢,我用的都没问题。
    static CString string;拷贝过去。
    当然还有其它方法,实在不行,就将这个string定义成公共变量。在.h文件中写extern CString string;
    在相应的.cpp文件中写CString string;(在文件的#include那些语句后
      

  8.   

    需要在MyDialog类中声明
    CString Myinterface::string;
      

  9.   

    CString Myinterface::string;
    //在类MyDialog1中调用 SetValue(m_Staion);
    void MyDialog1::OnButton1() 
    {
    UpdateData();
             Myinterface myinterface;
    myinterface.SetValue(m_Staion);//m_Staion为控件IDC_EDIT1变量
    }
    //在类MyDialog2中调用 SetValue(m_Staion);
    void MyDialog2::OnButton1() 
    {
             Myinterface myinterface;
             CString str;
    myinterface.GetValue(str);//m_Staion为控件变量
             MessageBox(str);
    }
    这样就可以了
      

  10.   

    那儿都可以啦。只要在.h文件中申明,在.cpp文件中定义
      

  11.   

    俺把以下语句注掉,static CString string 就不会出错了,
    //用来给接口类的私有变量CString string 赋值
    SetValue(CString& str)
    {
        //string=str;
    }
    //用来取出接口类中的私有变量CString string即:
    GetValue(CString& str)
    {
        //str=string;
    }
    这说明是在用静态字符串赋值时产生了错误,请问怎样避免这种情况发生?
      

  12.   

    使用静态变量后,同一个类的所有对象使用相同的一个变量,类似于使用全局变量,使用时要要类前缀。
    SetValue( const CString& str)//我加了个const,这不是为解决问题,而是常用习惯
    {
        Myinterface::string=str;
    }
    //用来取出接口类中的私有变量CString string即:
    GetValue(CString& str)
    {
        str=Myinterface::string;
    }
    但如果不用静态变量,使用时就不必加类前缀,但是不同的接口类对像间的数据不同,至少要把接口对像定义成静态或全局的才能实现数据的交换。
      

  13.   

    静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:    <数据类型><类名>::<静态数据成员名>=<值>
    所以,你在为静态成员赋值时,应按上面的格式。在Dialog2上加入CString Myinterface::string;
    同理,引用静态数据成员时,采用如下格式:   <类名>::<静态成员名>