Fortran Coder

标题: 类成员是过程指针的问题 [打印本页]

作者: lookbook    时间: 2019-1-17 15:50
标题: 类成员是过程指针的问题
本帖最后由 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, 下载次数: 247)

QQ截图20190117155443.jpg

作者: vvt    时间: 2019-1-18 09:03
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)

你的问题:
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 类型的。

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

作者: lookbook    时间: 2019-1-18 12:15
vvt 发表于 2019-1-18 09:03
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)

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

我使用的是gfortran





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2