Связанная часть массива указателей в Fortran [duplicate]

Я уверен, что путь к классам и путь поиска разделяемой библиотеки имеют мало общего с друг другом. Согласно JNI Book (который, по общему признанию, старый), в Windows, если вы не используете системное свойство java.library.path, DLL должна находиться в текущем рабочем каталоге или в каталоге, указанном в Windows PATH.


Обновление:

Похоже, что Oracle удалил PDF со своего веб-сайта. Я обновил ссылку выше, чтобы указать на экземпляр PDF, который живет в Техасском университете в Арлингтоне.

Кроме того, вы также можете прочитать HTML-версию Oracle спецификации JNI , Это живет в разделе Java 8 веб-сайта Java и, надеюсь, будет некоторое время.


Обновление 2:

По крайней мере, в Java 8 (я не знаю, t проверены более ранние версии), вы можете сделать:

java -XshowSettings:properties -version

, чтобы найти путь поиска совместно используемой библиотеки. Посмотрите на значение свойства java.library.path в этом выходе.

3
задан Antonio Serrano 20 November 2013 в 11:37
поделиться

1 ответ

Fortran на самом деле не делает массивы указателей. Ваше объявление

type(tSmall), pointer       :: var_small(:)

не определяет var_small как массив указателей на вещи типа tsmall; скорее, он определяет его как указатель на массив вещей типа tsmall.

Когда я компилирую ваш код, Intel Fortran дает более полезное сообщение об ошибке

Синтаксис назначения этого указателя данных неверен: в этом контексте ожидается «связанный spec» или «связанное переназначение».

, который приводит нас к R735 в стандарте Fortran 2003. Компилятор пытается проанализировать var_small(1) не так, как вы хотите, в качестве ссылки на первый элемент в массиве указателей, но либо в bounds-spec-list , либо в переопределении границ -list . Выражение не имеет правильного синтаксиса для и синтаксического анализа.

Итак, это касается вопроса о том, что означает ошибка. Что вы с этим поделаете? Это зависит от ваших намерений. Обычное предложение состоит в том, чтобы определить производный тип по этим строкам

type myptr
    type(tsmall), pointer :: psmall
end type myptr

, а затем использовать массив из этих

type(myptr), dimension(:), allocatable :: ptrarray

Лично мне никогда не нравился такой подход и никогда не нужно было его использовать (я пишу очень простые программы). Я ожидаю, что с Fortran 2003 есть и более подходящие подходы, но, не зная ваших намерений, я не решаюсь советоваться.

8
ответ дан High Performance Mark 22 August 2018 в 19:09
поделиться
  • 1
    Большое спасибо. Теперь я понимаю и понимаю, что делать. Я объявляю выделяемый массив tSmall, а затем каждый из его элементов равен var_big% member_small, а затем disassociate member_small, используя var_big% member_small = & gt; NULL () Это работает !. – Antonio Serrano 20 November 2013 в 14:12
Другие вопросы по тегам:

Похожие вопросы: