Fortran Coder

查看: 6120|回复: 2
打印 上一主题 下一主题

[面向对象] 类成员是过程指针的问题

[复制链接]

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2019-1-17 15:50:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lookbook 于 2019-1-17 15:56 编辑

文件1中定义了一个父类,其成员里面有名为zero_father的过程指针,指向了该文件中的私有函数zero。


文件2中定义了一个子类,继承了上面这个父类,并添加名为zero_son的过程指针,指向了该文件中的私有函数zero。


然后,我把子类在main里面use

仅仅use,啥都没干,

居然gfortran编译不通过。

错误代码是:

main.f90:3:6:

   use m_son
      1
Error: Interface mismatch for procedure-pointer component ‘zero_father’ in structure constructor at (1): Type mismatch in argument 'this' (CLASS(t_father)/CLASS(t_son))

这真的是。。。有点无语了。。。


QQ截图20190117155443.jpg (66.77 KB, 下载次数: 239)

QQ截图20190117155443.jpg
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2019-1-18 09:03:59 | 只看该作者
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)

你的问题:
procedure(method_) , nopass , pointer :: zero_son => zero
这句。

zero_son 的接口是 m_son::method_ 因此要求 this 是 t_son 类型。
指向的 zero 是 m_father::zero,他的接口是 m_father::method_ , 要求 this 是 t_father 类型的。

子类的指针不能指向父类的过程。(反之可以)

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
板凳
 楼主| 发表于 2019-1-18 12:15:37 | 只看该作者
vvt 发表于 2019-1-18 09:03
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)

感谢提醒,
1、两个文件文件里都有属性为private的zero函数
2、过程指针比较奇怪,必须接口严格对上,哪怕是父类子类,都不可互指

我使用的是gfortran
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-24 14:15

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表