无法覆盖 CMemFile::GrowFile
Posted
技术标签:
【中文标题】无法覆盖 CMemFile::GrowFile【英文标题】:Can't override CMemFile::GrowFile 【发布时间】:2009-10-24 12:09:58 【问题描述】:我有一个派生自 CMemFile 的类,称为 TempMemFile。我需要但不能覆盖 TempMemFile 中的 Growfile 方法。
当我在派生类 (TempMemFile) 中手写 GrowFile 方法时,当我单击我的 TempMemFile > Properties > Overrides the Growfile 时,它永远不会被调用,并且在类视图中,其他方法未在此处列出。事实上,只有 3 个方法被列为可覆盖的 Assert、Dump 和 Serialize。 MSDN 明确指出可以重写此方法。我错过了什么吗?
实施/声明
// TempMemFile.h
class CTempMemFile : public CMemFile
public:
CTempMemFile(void);
~CTempMemFile(void);
DWORD Begin(void);
private:
void GrowFile(SIZE_T dwNewLen); // override
;
// TempMemFile.cpp
CTempMemFile::CTempMemFile(void) : CMemFile
CTempMemFile::~TempMemFile(void)
void GrowFile(SIZE_T dwNewLen)
// This function is never called but CMemFile::Growfile always is verified on the callstack
【问题讨论】:
你的声明和调用是什么样的? // TempMemFile.h 类 CTempMemFile : public CMemFile public: CTempMemFile(void); ~CTempMemFile(void); DWORD 开始(无效);私人:无效GrowFile(SIZE_T dwNewLen); // 覆盖 ; // TempMemFile.cpp CTempMemFile::CTempMemFile(void) : CMemFile CTempMemFile::~TempMemFile(void) void GrowFile(SIZE_T dwNewLen) // 这个函数永远不会被调用,但是 CMemFile::Growfile 总是在调用栈 我已经用您要求的信息更新了原始 Q。 你能显示调用 GrowFile 的上下文吗? 【参考方案1】:您的GrowFile
实现适用于名为GrowFile
的全局函数。你需要在实现前CTempMemFile::
。
void CTempMemFile::GrowFile(SITE_T dwNewLen)
【讨论】:
做到了。还是一模一样。【参考方案2】:还要确保覆盖方法的可见性与基类的声明相匹配:
private:
void GrowFile(SIZE_T dwNewLen); // override
不正确
应该是public
或protected
(无论CMemFile::GrowFile
声明它是什么)。
【讨论】:
做到了。还是一模一样。 我看了看 CMemFile 并且 GrowFile 受到保护。这意味着它由基类调用,而不是由消费者调用。你知道基类在什么情况下需要调用 GrowFile 并且你确定是你造成了这些情况吗?可能只是这个 ptoected 方法从未被调用过。以上是关于无法覆盖 CMemFile::GrowFile的主要内容,如果未能解决你的问题,请参考以下文章