为了实现两个类之间的数据问题,俺设计了一个接口类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中所赋值的字符串,请问这是怎么回事??
其中有两个成员函数,如下所示//用来给接口类的私有变量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中所赋值的字符串,请问这是怎么回事??
是的呀,那怎么解决呢??
static string;
这样的话,所有接口类的实例都共享这一个静态内存中的数据了。
{
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(快乐鹦鹉)可以帮俺看一下吗?
可是:
error LNK2001: unresolved external symbol "private: static class CString Myinterface::string" (?string@Myinterface@@0VCString@@A)
static CString string;确是错误的,为什么?
是不是因为CString是一个类呢?
那怎样解决?
static CString string;拷贝过去。
当然还有其它方法,实在不行,就将这个string定义成公共变量。在.h文件中写extern CString string;
在相应的.cpp文件中写CString string;(在文件的#include那些语句后
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);
}
这样就可以了
//用来给接口类的私有变量CString string 赋值
SetValue(CString& str)
{
//string=str;
}
//用来取出接口类中的私有变量CString string即:
GetValue(CString& str)
{
//str=string;
}
这说明是在用静态字符串赋值时产生了错误,请问怎样避免这种情况发生?
SetValue( const CString& str)//我加了个const,这不是为解决问题,而是常用习惯
{
Myinterface::string=str;
}
//用来取出接口类中的私有变量CString string即:
GetValue(CString& str)
{
str=Myinterface::string;
}
但如果不用静态变量,使用时就不必加类前缀,但是不同的接口类对像间的数据不同,至少要把接口对像定义成静态或全局的才能实现数据的交换。
所以,你在为静态成员赋值时,应按上面的格式。在Dialog2上加入CString Myinterface::string;
同理,引用静态数据成员时,采用如下格式: <类名>::<静态成员名>