带有指针返回问题的c++协方差问题
c++ Covariance issue with pointer return issue
由于我的帖子中有很多歧义,我会重做它。这是我在一个项目中遇到的一个问题,我正在从visual studio 6.0环境升级到visual studio 2012环境。
我有一个派生自以下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的标头,但这并没有解决问题。我还读到了在返回类型之后进行强制转换的可能性,但不确定这是否能解决问题,而且不确定在这种情况下如何执行。
编辑:解决后,下面的帖子是问题的一部分,然而,常量正确性也是。我真可耻!
在标题中应指定为
CBankDefImportSheet * GetParentSheet () const;
而且在cpp 中
CBankDefImportSheet * CBankDefImportAssignPage::GetParentSheet() const
{
return ((CBankDefImportSheet *)GetParent ());
}
编译器需要知道在声明CDefImportSheetPage::GetParentSheet()
时(您已经标记了.h
)CDefImportSheet
继承自CPropertySheet
。
它无法从简单的正向声明中获得这些信息,比如:
class CDefImportSheet;
您需要在那里包含CDefImportSheet
的标头。
我在编辑中回答了自己的问题,但根据建议,我也会在这里添加它。我的问题的主要原因是mfc对话框函数是常量。因此,由于的常量正确性(或在这种情况下的不正确性)而导致错误的协方差
CBankDefImportSheet* GetParentSheet ();
在标题中应指定为
CBankDefImportSheet * GetParentSheet () const;
而且在cpp 中
CBankDefImportSheet * CBankDefImportAssignPage::GetParentSheet() const
{
return ((CBankDefImportSheet *)GetParent ());
}
我很高兴这已经帮助了至少一个人。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题