关于类之间的数据传递问题!

lijins 2004-06-18 03:55:08
为了实现两个类之间的数据问题,俺设计了一个接口类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中所赋值的字符串,请问这是怎么回事??
...全文
381 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-01
  • 打赏
  • 举报
回复
不会,帮顶一下!
CsdnRob 2004-07-01
  • 打赏
  • 举报
回复
不会,帮顶一下!
CsdnRob 2004-07-01
  • 打赏
  • 举报
回复
不会,帮顶一下!
lishan2002 2004-06-18
  • 打赏
  • 举报
回复
静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

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

   <类名>::<静态成员名>
QunKangLi 2004-06-18
  • 打赏
  • 举报
回复
使用静态变量后,同一个类的所有对象使用相同的一个变量,类似于使用全局变量,使用时要要类前缀。
SetValue( const CString& str)//我加了个const,这不是为解决问题,而是常用习惯
{
Myinterface::string=str;
}
//用来取出接口类中的私有变量CString string即:
GetValue(CString& str)
{
str=Myinterface::string;
}


但如果不用静态变量,使用时就不必加类前缀,但是不同的接口类对像间的数据不同,至少要把接口对像定义成静态或全局的才能实现数据的交换。
lijins 2004-06-18
  • 打赏
  • 举报
回复
俺把以下语句注掉,static CString string 就不会出错了,
//用来给接口类的私有变量CString string 赋值
SetValue(CString& str)
{
//string=str;
}
//用来取出接口类中的私有变量CString string即:
GetValue(CString& str)
{
//str=string;
}
这说明是在用静态字符串赋值时产生了错误,请问怎样避免这种情况发生?

快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
那儿都可以啦。只要在.h文件中申明,在.cpp文件中定义
owen_2001 2004-06-18
  • 打赏
  • 举报
回复
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);
}
这样就可以了
lijins 2004-06-18
  • 打赏
  • 举报
回复
问一个菜鸟级问题,定义公共全局变量在什么位置定义??
owen_2001 2004-06-18
  • 打赏
  • 举报
回复
需要在MyDialog类中声明
CString Myinterface::string;
快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
怎么可能呢,我用的都没问题。
static CString string;拷贝过去。
当然还有其它方法,实在不行,就将这个string定义成公共变量。在.h文件中写extern CString string;
在相应的.cpp文件中写CString string;(在文件的#include那些语句后
lijins 2004-06-18
  • 打赏
  • 举报
回复
是呀!
有没有其它的解决方法呀??
快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
还是这个错啊?
lijins 2004-06-18
  • 打赏
  • 举报
回复
俺用的就是小写,己经改过来了!还不行!
快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
static用小写!!!!不是Static!!!!!
lijins 2004-06-18
  • 打赏
  • 举报
回复
static int n;是正确的
static CString string;确是错误的,为什么?
是不是因为CString是一个类呢?
那怎样解决?
lijins 2004-06-18
  • 打赏
  • 举报
回复
俺是听了你再定义成静态的!
可是:
error LNK2001: unresolved external symbol "private: static class CString Myinterface::string" (?string@Myinterface@@0VCString@@A)
快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
你不是已经定义成静态了吗?还不行啊?
lijins 2004-06-18
  • 打赏
  • 举报
回复
//Myinterface.h

class 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(快乐鹦鹉)可以帮俺看一下吗?
快乐鹦鹉 2004-06-18
  • 打赏
  • 举报
回复
我说了,将这个接口中的私有变量都定义为静态的吧。
static string;
这样的话,所有接口类的实例都共享这一个静态内存中的数据了。
加载更多回复(2)

16,472

社区成员

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

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

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