类成员是过程指针的问题
本帖最后由 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))
这真的是。。。有点无语了。。。
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)
你的问题:
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 类型的。
子类的指针不能指向父类的过程。(反之可以)
vvt 发表于 2019-1-18 09:03
下次提问,请给出代码(文字,而非图片)
(反正我是不愿意再把代码敲一次的)
感谢提醒,
1、两个文件文件里都有属性为private的zero函数
2、过程指针比较奇怪,必须接口严格对上,哪怕是父类子类,都不可互指
我使用的是gfortran
页:
[1]