问个关于类成员之间的交换问题。

lostgdi731 2004-08-08 08:48:42
class A
{
Public:
CFile logfile;
Openlog() {logfile.Open("4.txt",CFile::modeCreate|CFile::modeReadWrite);}
Writelog() {logfile.Write("haha",5);}
....


class B
{
Public:
Working();

为什么在B对象里先调用A对象的Openlog函数,接着调用Writelog函数时出现非法操作呢?
我Debug看到logfile为非法句柄,但已是用Openlog初始化了的拉。

其实CFile这只是一个例子,我有很多地方也出现这样的情况。
...全文
202 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
class A
{
public:
CFile logfile;
Openlog() {logfile.Open("4.txt",CFile::modeCreate|CFile::modeReadWrite);}
Writelog() {logfile.Write("haha",5);}
};

class B
{
public:
A *pA;
B()
{
pA = new A;
}
Working()
{
pA->Openlog();
pA->Writelog();//这里出错。
}
~B()
{
delete pA;
}
};
void CAbDlg::OnButton1()
{
B b;
b.Working();

}
用指针也没有问题
4.txt存在也没有问题被覆盖了
  • 打赏
  • 举报
回复
class A
{
public:
CFile logfile;
Openlog() {logfile.Open("4.txt",CFile::modeCreate|CFile::modeReadWrite);}
Writelog() {logfile.Write("haha",5);}
};

class B
{
public:
A a;
Working()
{
a.Openlog();
a.Writelog();//这里出错。
}
};
void CAbDlg::OnButton1()
{
B b;
b.Working();

}
没有问题啊自动新建了一个4.txt
lostgdi731 2004-08-12
  • 打赏
  • 举报
回复
再Up
lostgdi731 2004-08-10
  • 打赏
  • 举报
回复
不用怀疑啦.你们自己测试一下.好简单的.
我在Debug时看到open函数是成功打开了文件的.
Writelog打开的文件就是公有成员的CFile logfile
xiaomaofantuan 2004-08-10
  • 打赏
  • 举报
回复
你确定打开的文件和Writelog() 里所用的我文件是同一个文件??
hooliganstreet 2004-08-09
  • 打赏
  • 举报
回复
我怀疑就是没打开文件,你的4.txt的路径是不是有问题?
lostgdi731 2004-08-09
  • 打赏
  • 举报
回复
pa是A类的指针
在Working()里
{
pa->Openlog();
pa->Writelog();//这里出错。
}
holyeagle 2004-08-09
  • 打赏
  • 举报
回复
你是如何实现的?
是否在B里面分成两次调用,如
class B
{
Public:
Initial();
Working();
然后在Initial里面调用OpenLog,在Working里面调用WriteLog,而且没有保存过class A,每次得用时候重新声明一个A?
如果这样做会失败。因为创建的是临时变量,把A声明的变量定义成B的成员变量。

不知道楼主是不是这个问题,信息太少,最好有代码。
FlyNesta 2004-08-09
  • 打赏
  • 举报
回复
没有代码,没办法判断啊
lostgdi731 2004-08-09
  • 打赏
  • 举报
回复
再Up,没人答我决不给分的。
lostgdi731 2004-08-08
  • 打赏
  • 举报
回复
Up
lostgdi731 2004-08-08
  • 打赏
  • 举报
回复
文件是打开成功的,你可以试试。
我Debug时看到logfile句柄在open函数和在write函数是不同的,我觉得问题就是为什么公有成员不能共用。
flyelf 2004-08-08
  • 打赏
  • 举报
回复
打开文件时没有成功
kim1977 2004-08-08
  • 打赏
  • 举报
回复
up
howtotell 2004-08-08
  • 打赏
  • 举报
回复
写成全局的就OK了.要么就要把B声明为A的友元类.
xiaomaofantuan 2004-08-08
  • 打赏
  • 举报
回复
B对象里先调用A对象的Openlog函数,接着调用Writelog函数的代码粘出来瞧瞧

16,548

社区成员

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

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

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