Fortran на самом деле не делает массивы указателей. Ваше объявление
type(tSmall), pointer :: var_small(:)
не определяет var_small
как массив указателей на вещи типа tsmall
; скорее, он определяет его как указатель на массив вещей типа tsmall
.
Когда я компилирую ваш код, Intel Fortran дает более полезное сообщение об ошибке
Синтаксис назначения этого указателя данных неверен: в этом контексте ожидается «связанный spec» или «связанное переназначение».
blockquote>, который приводит нас к 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 есть и более подходящие подходы, но, не зная ваших намерений, я не решаюсь советоваться.