|
|
|
FCM |
|
|||
Опытный Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Что-то никак не пойму:
может ли (согласно стандарту 2008) конструктор по умолчанию вызываться вне модуля, где определен производный тип, если какое-либо поле типа приватное (в модуле)? - на практике a) в Intel Fortran вызывается без проблем b) в mingw-gfortran не вызывается. Это сообщение отредактировал(а) FCM - 31.1.2013, 12:04 |
|||
|
||||
kemiisto |
|
||||||||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
FCM, минимальный бы пример, а то я не совсем понимаю, о чём речь.
Например, вот такое
Не должно даже компилироваться по стандарту. Так и есть: ifort 13.1.0
gfortran 4.7.2
Это сообщение отредактировал(а) kemiisto - 12.2.2013, 11:28 -------------------- |
||||||||
|
|||||||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Вот, собственно, цитата из стандарта. Раздел 4.5.10 Construction of derived-type values.
Это сообщение отредактировал(а) kemiisto - 13.2.2013, 11:57 -------------------- |
|||
|
||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
В предположении, что проблемма именно та, вот решение:
Только компиллятор свеженький должен быть. На обозначенных выше - работает. -------------------- |
|||
|
||||
FCM |
|
|||
Опытный Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
1) kemiisto, спасибо! Это то что я высматривал, да не высмотрел (надо мне чего-нибудь выпить для повышения внимательности ) 2) Что касается Intel, посмотри, как он себя поведет, если в твоем примере определение типа изменить так (что совершенно законно)
3) Да , это штука известная. Называют ее обычно перегрузкой конструктора. Однако перегрузка, в отличие от default-контсруктора, не может использоваться при инициализации. |
|||
|
||||
kemiisto |
|
||||||||||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Да уж, стандарт написан суровым языком.
Видимо, баг в компиляторе. Пропускает без ошибок. А gfortran ругается, как и положено.
Есть такое дело. Это, вроде, никак не обойти. Объявление переменно и её инициализация - две совсем разные истории. Едиснтвенное, что можно сделать это инициализировать поля неким значением по-умолчанию:
тогда можно вызывать конструктор по-умолчанию даже при наличии PRIVATE компонент:
Но такая инициализация ограничена некими константными значениями. Единственный выигрыш тут в том, что сразу после создания и одновременной инициализации объект валиден. Это сообщение отредактировал(а) kemiisto - 15.2.2013, 10:27 -------------------- |
||||||||||
|
|||||||||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |