Initialization Fortran:错误#6562:数据初始化表达式对此对象无效
我试图将Fortran子例程中的本地逻辑数组初始化为false,但出现错误: 错误#6562:数据初始化表达式对此对象无效 这是我的声明:Initialization Fortran:错误#6562:数据初始化表达式对此对象无效,initialization,fortran,Initialization,Fortran,我试图将Fortran子例程中的本地逻辑数组初始化为false,但出现错误: 错误#6562:数据初始化表达式对此对象无效 这是我的声明: integer , intent(in) :: nLOW integer , intent(in) :: nUP logical , dimension(nLOW:nUP) :: leastSQUARE = .fals
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(nLOW:nUP) :: leastSQUARE = .false.
如果我使用以下命令,则会出现相同的错误:
integer :: I
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(nLOW:nUP) :: leastSQUARE = (/ (.false., I = nLOW:nUP) /)
如果我写:
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(1:100) :: leastSQUARE = .false.
子例程编译时没有错误。知道为什么会这样吗?我显然需要
leastSQUARE
的尺寸nLOW:nUP
,因此后者不是一个解决办法。我认为语言标准禁止生成错误的构造,特别是R503上的C506(在Fortran 2008版本中)。这一约束规定
如果对象名称是伪参数,则不应出现初始化,
函数结果,命名公共块中的对象,除非类型
声明位于块数据程序单元中,对象为空
公共、可分配变量或自动对象
leastSQUARE
就是这样一个自动对象,其边界只有在运行时才知道。您必须在声明中单独对其进行初始化
为了清楚(多亏了@IanH),您必须执行赋值语句来为自动对象提供初始值。我在上一段中使用的动词initialise不是Fortran标准。从Fortran术语的角度来看,初始化发生在哪里(源代码方面)无关紧要—它根本无法初始化。如果OP希望数组在过程的执行序列的早期具有特定值,那么他们需要使用赋值语句或类似语句为数组提供该值。初始化意味着保存,保存与自动对象不一致(当其值的基本特征因调用而异时,某些对象无法保留其值(…保存…)。