下面是我犯的一个错误,与大家共享教训
2008-12-26 12:15
295 查看
下面是我犯的一个错误,与大家共享教训:
MFC的文件类Cfile没有提供通写(WriteThrough)功能,所以就重载了CFile,目的是重新实现基类虚函数Open,派生类CwriteThroughFile,定义如下:
class _NCLIB_EXP CWriteThroughFile : public CFile
{
public:
// Constructors
CWriteThroughFile()
{}
CWriteThroughFile(int hFile)
: CFile(hFile) {}
CWriteThroughFile(LPCTSTR lpszFileName, UINT nOpenFlags)
: CFile(lpszFileName, nOpenFlags) {}
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags,
CFileException* pError = NULL);
};
应用该类的代码:
try
{
CWriteThroughFile _file(pszDatFileName_, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite);
…
}
}
catch (CFileException* pe_)
{
…
}
但是错误是:这个CwriteThroughFile的对象_file在打开文件时候,并没有调用虚函数CwriteThroughFile::Open,而是调用了基类的Open函数。
教训:
1 我没有仔细测试,是造成错误的直接原因,如果能够单步跟踪一下,一定能够发现问题。
所以无论写多么简单的代码都必须至少单步跟踪一边,不能想当然。这方面已经有很多教训了。
2 这个例子充分说明了在构造函数中调用虚函数的害处。
相关文章推荐
- 请大家看一下一个c语言中的链表问题,下面的代码是有错误的!!请大家说出错误的原因,以及修改的方法!!!
- yii2:doajax(post)会报500错误 (个人项目代码奉上,希望对大家有帮助, 下面是执行一个删除操作)
- 连接共享文件夹时报错:发生系统错误 1219:不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接
- 给大家提供一个下载的好去处,下面是链接
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- Internet 连接共享访问被启用时,出现了一个错误
- 对live555封装的比较好的一个类,网上找到的,觉得不错,给大家共享
- 给大家共享一个可以在任何界面调用的Dialog
- 最近在做EDA设计,犯了一个错误,不知何原因,大家看后避免之。。。
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 发现一个好东西,和大家共享呀~~~~
- 看了GAL游戏资源文件黑盒分析,想起以前做的一个提取器,发来大家共享一下
- 一个愚蠢的错误,一次深刻的教训
- Spring+Hibernate+Struts技术的一个分页程序,共享给大家
- class view中的一个方法实现时出现下面错误 cannot find the definition (implementation) of this function
- 基本在每个项目中都会遇到发送邮件的需求,大家熟知的邮箱有新浪、雅虎、QQ、OUTLOOK等,想必大家也遇到过发送邮件总是被发送到垃圾邮箱中,下面是我找到的一个解决办法,仅供参考。
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 一个分页标签,头疼好好久,写出来去大家共享
- 自己搜集的关于HTTP的错误代码大全中英文对照,在此献上,与大家共享