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

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这只是一个例子,我有很多地方也出现这样的情况。
...全文
138 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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函数的代码粘出来瞧瞧
回复
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-08 08:48
社区公告

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