c ++指针返回问题的协方差问题

时间:2015-02-27 07:17:52

标签: c++ visual-studio-2012 mfc const covariance

由于我的帖子中有很多歧义,我会重做它。 这是我在从Visual Studio 6.0环境升级到visual studio 2012环境的项目中遇到的问题。

我有一个派生自followinh mfc类(CPropertyPage)的类,它包含以下函数。文件是afxdlgs.h(mfc类)

class CPropertyPage : public CDialog
{
public:
virtual CPropertySheet *GetParentSheet();
}

在更改前向声明后,我似乎仍然遇到问题。由于我的配方不好,这是一个结果。所以我把它改回原来的形式。

派生类看起来像这样。 头

class CBankDefImportSheet;
class CBankDefImportAssignPage : public CPropertyPage
{
protected:
    CBankDefImportSheet* GetParentSheet ();
}

在cpp

#include "BankDefImportSheet.h"
CBankDefImportSheet* CBankDefImportAssignPage::GetParentSheet()
{
    return (CBankDefImportSheet *)GetParent ();
}

此外,CBangDefImportSheet是

class CBankDefImportSheet : public CPropertySheet
{}

当我编译时,我得到C2555错误,返回类型不同,并且不是CPropertyPage :: GetParentSheet的协变。

我尝试添加CBankDefImportSheet的标题但是没有解决它。我也读过在返回类型之后能够进行转换的可能性,但不确定是否会解决它,还不确定在这种情况下如何做到这一点。

编辑:解决后,下面的帖子是问题的一部分,然而,const的正确性也是如此。对我感到羞耻!

标题中的

应指定为

 CBankDefImportSheet * GetParentSheet () const;

以及cpp

 CBankDefImportSheet * CBankDefImportAssignPage::GetParentSheet() const
 {
     return ((CBankDefImportSheet *)GetParent ());
 }

2 个答案:

答案 0 :(得分:2)

编译器需要知道CDefImportSheetPage::GetParentSheet().h已声明CDefImportSheet CPropertySheet继承class CDefImportSheet;

它无法从简单的前向声明中获取该信息,如:

CDefImportSheet

您需要在其中加入{{1}}标题。

答案 1 :(得分:0)

我在编辑中回答了我自己的问题,但是根据建议我也会在这里添加它。我的问题的主要原因是mfc对话框函数是const。因此,由于const正确性(或在这种情况下不正确)导致错误的协方差

CBankDefImportSheet* GetParentSheet ();
标题中的

应指定为

CBankDefImportSheet * GetParentSheet () const;

以及cpp

CBankDefImportSheet * CBankDefImportAssignPage::GetParentSheet() const
{
return ((CBankDefImportSheet *)GetParent ());
}

我很高兴这至少帮助了另外一个人。