0

わかりましたので、パッケージ dirforinv.adb を呼び出すコードを実行しようとしています:

WITH  Text_IO;
WITH  Ada.Numerics.Generic_Real_Arrays;
WITH  Ada.Numerics.Generic_Elementary_functions;
WITH  Ada.Strings.Fixed;
WITH  dirforinv;
PROCEDURE  levfordir  IS

J : CONSTANT  Integer := 100;

TYPE  Real  IS DIGITS  13;

PACKAGE  Real_IO  IS NEW  Text_IO.Float_IO   (Real);
PACKAGE  Int_IO   IS NEW  Text_IO.Integer_IO (Integer);

TYPE  Gen_arr  IS ARRAY (INTEGER RANGE <>, INTEGER RANGE <>)  OF  Real;
TYPE  var_array  IS ARRAY (INTEGER RANGE <>)  OF  Real;

PACKAGE  Real_arrays  IS NEW Ada.numerics.Generic_Real_Arrays (Real);
USE      Real_arrays;
PACKAGE  sdirect      IS NEW dirforinv (var_array, Gen_arr);
PACKAGE  Math         IS NEW Ada.numerics.Generic_Elementary_functions (Real);
USE      Math;

しかし、次のエラーが発生します。

  PACKAGE  sdirect      IS NEW dirforinv (var_array, Gen_arr);
                                             |
    >>> expect float type in instantiation of "Real"
    >>> instantiation abandoned

dirforinv は、var_array の 1 つと Gen_arr の 4 つの 5 つの配列を想定しているため、これを理解できません。dirforinv の .ads は次のとおりです。

WITH Profiles,
   Profiles.Inputs,
   Profiles.Conversion,
   Profiles.Provide_Grids,
   Profiles.Multipolar,
   Profiles.Unno_Solver,
   Profiles.Outputs,
   Text_IO, Ada.Numerics.Generic_Elementary_Functions;
USE Profiles;


GENERIC
  TYPE Real  IS DIGITS <>;
  TYPE Gen_arr  IS ARRAY (INTEGER RANGE <>, INTEGER RANGE <>) OF REAL;
  TYPE var_array  IS ARRAY (INTEGER RANGE <>)  OF  REAL;

PACKAGE dirforinv IS

 PROCEDURE direct (Variables                 : IN  var_array;
                   StoI, StoQ, StoU, StoV    : OUT Gen_arr );

END dirforinv;

アドバイスをありがとう。

4

1 に答える 1

6

dirforinv(ちなみに恐ろしい名前)の宣言は

GENERIC
  TYPE Real  IS DIGITS <>;
  TYPE Gen_arr  IS ARRAY (INTEGER RANGE <>, INTEGER RANGE <>) OF REAL;
  TYPE var_array  IS ARRAY (INTEGER RANGE <>)  OF  REAL;

PACKAGE dirforinv IS

これには、3 つの一般的な仮パラメーターがあります。あなたの試みたインスタンス化は

PACKAGE  sdirect      IS NEW dirforinv (var_array, Gen_arr);

2つしかありません。

于 2013-01-30T11:32:57.413 に答える