Fortran Coder

查看: 231|回复: 2

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

[复制链接]

63

帖子

14

主题

0

精华

专家

齊天大聖

F 币
317 元
贡献
200 点
发表于 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
回复

使用道具 举报

691

帖子

0

主题

0

精华

大师

F 币
665 元
贡献
372 点

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

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 类型的。

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

63

帖子

14

主题

0

精华

专家

齊天大聖

F 币
317 元
贡献
200 点
 楼主| 发表于 2019-1-18 12:15:37 | 显示全部楼层
vvt 发表于 2019-1-18 09:03
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)

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

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

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-7-16 08:56

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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