猴雨云 发表于 2014-4-25 18:24: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.   
      EXTERNAL :: Hex1, READINIT
------------------^
C:\Users\admin\Desktop\SNOPT_EQUI0\userfg.f(44) : Error: The *v specifier is invalid unless the NOF77 dialect is specified.   
      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.   
      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.   
      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:37

在我这里,错误行都是正常的。

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

如果还有问题,建议上传所有代码(以附件形式上传 userfg.f 文件 )。

猴雨云 发表于 2014-4-25 20:49:24

chuxf 发表于 2014-4-25 19:12
在我这里,错误行都是正常的。

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


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

楚香饭 发表于 2014-4-25 21:04:44

CVF 貌似不允许 EXTERNAL 后面跟冒号,尝试删除后面的双冒号既可。

IVF 允许,我使用的是它。

猴雨云 发表于 2014-4-25 21:15:56

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.   
      parameter         (ISTAGE = 182, xpi = 4.d0*datan(1.d0))
这是什么原因呢?这个函数不就是求反正切吗?

猴雨云 发表于 2014-4-25 21:17:41

chuxf 发表于 2014-4-25 21:04
CVF 貌似不允许 EXTERNAL 后面跟冒号,尝试删除后面的双冒号既可。

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

还有我想问一下,现在fortran使用IVF好呢还是用CVF好呢?我刚接触fortran不久,不知道用哪个版本好一些,

楚香饭 发表于 2014-4-25 21:38:12

猴雨云 发表于 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:26

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

所以,把这句改为


嗯嗯,谢谢呢,这个错误我已经改了,就是用CVF感觉有些语法错误的地方不容易察觉,我之前一直用的是matlab,请问你知道怎么在fortran中调用matlab自己编的函数吗?

楚香饭 发表于 2014-4-25 22:02:02

猴雨云 发表于 2014-4-25 21:43
嗯嗯,谢谢呢,这个错误我已经改了,就是用CVF感觉有些语法错误的地方不容易察觉,我之前一直用的是matla ...

matlab 我不太熟悉怎么调用,百度一下相关的内容吧

猴雨云 发表于 2014-4-25 22:06:00

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

嗯嗯,谢谢哈,嘿嘿
页: [1]
查看完整版本: 子程序声明时出现错误