fortran中的数据语句

时间:2019-06-08 14:18:03

标签: fortran gfortran

我试图在fortran中写一些数据...

#include <iostream>
#include <array>
#include <functional>

template<typename Container, typename T>
void notify( Container& observers, T value )
{
   for ( auto& observer : observers )
      observer( value );
}

// updateX can be defined in another unit but exposed in a header
void update1( int i )
{
   std::cout << "observer 1:" << i << std::endl;
}

void update2( int i )
{
   std::cout << "observer 2:" << i << std::endl;
}

const std::array<std::function<void(int)>, 2> observers {
   [](int i) { update1( i ); },
   [](int i) { update2( i ); }
};

int main()
{
   notify( observers, 3 );
   return 0;
}

但是我总是在(1)处收到错误消息意外的属性声明语句

有人知道为什么吗?

2 个答案:

答案 0 :(得分:0)

正如其他人已经指出的那样,您应该使用新的fortran标准。如果这样做,您可以删除用来表示连续行的“ +”(应该在第6列中),而应在该行的末尾添加一个&符“&”。 然后程序编译并运行。但是由于X和W是单精度,因此您在数据语句中使用了太多数字。使用隐式none并声明所有变量。并获得一本教科书。

答案 1 :(得分:0)

在下面,您发现对代码进行了较小的更新,从而可以对其进行编译:

      program Problemless

      dimension X(8), W(8)
      data X /0.0950125098D0, 0.2816035507D0, 0.4580167776D0,
     +        0.6178762444D0, 0.7554044083D0, 0.8656312023D0,
     +        0.9445750230D0, 0.9894009349D0/
      data W /0.1894506104D0, 0.1826034150D0, 0.1691565193D0,
     +        0.1495959888D0, 0.1246289712D0, 0.0951585116D0,
     +        0.0622535239D0, 0.0271524594D0/

      D = 0.D0
      do NJ=1,8
         D = D + X(NJ) + W(NJ) 
      enddo

      write(*,*) D

      end

您的代码以固定源代码形式编写(请参见Fortran standard的6.3.3节)。这意味着您不能在第72列之外进行任何操作。我所做的就是在上面纠正此错误。

如果您正在学习fortran,建议不要使用固定格式,而要使用免费格式。

此帖子无需投票