无法覆盖 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

不正确

应该是publicprotected(无论CMemFile::GrowFile 声明它是什么)。

【讨论】:

做到了。还是一模一样。 我看了看 CMemFile 并且 GrowFile 受到保护。这意味着它由基类调用,而不是由消费者调用。你知道基类在什么情况下需要调用 GrowFile 并且你确定是你造成了这些情况吗?可能只是这个 ptoected 方法从未被调用过。

以上是关于无法覆盖 CMemFile::GrowFile的主要内容,如果未能解决你的问题,请参考以下文章

无法覆盖UIView.Draw方法

JUnit 覆盖无法访问的代码

无法覆盖prepareForSegue函数[重复]

无法覆盖 CMemFile::GrowFile

无法使用自定义类返回类型覆盖方法

无法覆盖 ListFragment 中的 onCreateOptionsMenu