Fortran Coder

标题: 子程序声明时出现错误 [打印本页]

作者: 猴雨云    时间: 2014-4-25 18:24
标题: 子程序声明时出现错误
错误提示:
-Configuration: snmaina - Win32 Debug--------------------
Compiling Fortran...
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f(43) : Error: Syntax error, found '::' when expecting one of: * <IDENTIFIER>
      EXTERNAL :: Hex1, READINIT
---------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f(44) : Error: Syntax error, found '::' when expecting one of: * <IDENTIFIER>
      EXTERNAL :: ONESTEPRK4TH, VECTORFIELDequiTH, JACFUNequiTH,
---------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f(43) : Error: The *v specifier is invalid unless the NOF77 dialect is specified.   [HEX1]
      EXTERNAL :: Hex1, READINIT
------------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f(44) : Error: The *v specifier is invalid unless the NOF77 dialect is specified.   [ONESTEPRK4TH]
      EXTERNAL :: ONESTEPRK4TH, VECTORFIELDequiTH, JACFUNequiTH,
------------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\IpoptConstDeriv.f
C:\Users\admin\Desktop\SNOPT_EQUI0\IpoptConstDeriv.f(25) : Error: Syntax error, found '::' when expecting one of: * <IDENTIFIER>
      EXTERNAL :: ONESTEPRK4TH, VECTORFIELDequiTH, JACFUNequiTH,
---------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\IpoptConstDeriv.f(25) : Error: The *v specifier is invalid unless the NOF77 dialect is specified.   [ONESTEPRK4TH]
      EXTERNAL :: ONESTEPRK4TH, VECTORFIELDequiTH, JACFUNequiTH,
------------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\hex1.f
C:\Users\admin\Desktop\SNOPT_EQUI0\hex1.f(87) : Error: This intrinsic function is invalid in constant expressions.   [DATAN]
      parameter         (ISTAGE = 182, xpi = 4.d0*datan(1.d0))
--------------------------------------------------^
Error executing df.exe.

snmaina.exe - 7 error(s), 0 warning(s)
请教大师们怎么解决?



作者: 楚香饭    时间: 2014-4-25 19:12
在我这里,错误行都是正常的。

请注意你的源代码是自由格式,还是固定格式?

如果还有问题,建议上传所有代码(以附件形式上传 userfg.f 文件 )。
作者: 猴雨云    时间: 2014-4-25 20:49
chuxf 发表于 2014-4-25 19:12
在我这里,错误行都是正常的。

请注意你的源代码是自由格式,还是固定格式?

我用的是fortran6.5版本,感觉这些函数定义都是对的,不知道为什么会报错?

userfg.f

1.83 KB, 下载次数: 1


作者: 楚香饭    时间: 2014-4-25 21:04
CVF 貌似不允许 EXTERNAL 后面跟冒号,尝试删除后面的双冒号既可。

IVF 允许,我使用的是它。
作者: 猴雨云    时间: 2014-4-25 21:15
chuxf 发表于 2014-4-25 21:04
CVF 貌似不允许 EXTERNAL 后面跟冒号,尝试删除后面的双冒号既可。

IVF 允许,我使用的是它。 ...

嗯嗯,删了后那些不报错,但是还有一个内部函数DATAN报错,
C:\Users\admin\Desktop\SNOPT_EQUI0\hex1.f(87) : Error: This intrinsic function is invalid in constant expressions.   [DATAN]
      parameter         (ISTAGE = 182, xpi = 4.d0*datan(1.d0))
这是什么原因呢?这个函数不就是求反正切吗?
作者: 猴雨云    时间: 2014-4-25 21:17
chuxf 发表于 2014-4-25 21:04
CVF 貌似不允许 EXTERNAL 后面跟冒号,尝试删除后面的双冒号既可。

IVF 允许,我使用的是它。 ...

还有我想问一下,现在fortran使用IVF好呢还是用CVF好呢?我刚接触fortran不久,不知道用哪个版本好一些,
作者: 楚香饭    时间: 2014-4-25 21:38
猴雨云 发表于 2014-4-25 21:15
嗯嗯,删了后那些不报错,但是还有一个内部函数DATAN报错,
C:\Users\admin\Desktop\SNOPT_EQUI0\hex1.f( ...

CVF 也不允许在常数定义时使用内部函数。

所以,把这句改为
parameter(ISTAGE = 182, xpi = 3.141592654D0 )

另,编译器之间没有绝对的好坏。
CVF 古老,经典,有些写法不支持,win7/8 无法使用。
IVF 新潮,支持的语法更现代,但臃肿,安装和操作都麻烦。

建议有条件的话,选择 IVF 吧

作者: 猴雨云    时间: 2014-4-25 21:43
chuxf 发表于 2014-4-25 21:38
CVF 也不允许在常数定义时使用内部函数。

所以,把这句改为

嗯嗯,谢谢呢,这个错误我已经改了,就是用CVF感觉有些语法错误的地方不容易察觉,我之前一直用的是matlab,请问你知道怎么在fortran中调用matlab自己编的函数吗?
作者: 楚香饭    时间: 2014-4-25 22:02
猴雨云 发表于 2014-4-25 21:43
嗯嗯,谢谢呢,这个错误我已经改了,就是用CVF感觉有些语法错误的地方不容易察觉,我之前一直用的是matla ...

matlab 我不太熟悉怎么调用,百度一下相关的内容吧
作者: 猴雨云    时间: 2014-4-25 22:06
chuxf 发表于 2014-4-25 22:02
matlab 我不太熟悉怎么调用,百度一下相关的内容吧

嗯嗯,谢谢哈,嘿嘿




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