私はこの質問を読みました:Fortran 90モジュールデータをどのように使用しますかしかし、私は私の問題を解決することができませんでした。
別のモジュールで宣言されている変数を使用しようとすると、エラーLNK2019:未解決の外部シンボルが発生します。
背景情報:私はFortranの初心者であり、他の誰かが作成したプロジェクトで働いています。私はIntelFortran作曲家とビジュアルスタジオを使用しています。パブリックモジュールデータとプライベートモジュールデータの使用法を正しく理解しているかどうかはわかりません。
問題は、別のモジュールで変数BodySystemを使用しようとすると、それが機能せず、未解決の外部シンボルがあるというエラーが表示されることです。
パブリックパーツとプライベートパーツを正しく使用していませんか、それとも他のものが不足していますか?
編集:コードをコンパイル可能なスニペットに変更しました
Edit2:問題ではなかったので、コードを削除しました。オブジェクトファイルが古くなったので、IanHは私に正しい答えをくれました。
私が受け取る正確なエラーメッセージは次のとおりです。
エラー2致命的なエラーLNK1120:1未解決の外部Debug \ HmSlam.exe
エラー1エラーLNK2019 :未解決の外部シンボル_COORDINATESSYSTEM_M_mp_BODYSYSTEMが関数_MAIN__HmSlam.objで参照されています
ここで、HmSlamはメインプログラムであり、coordinatessystem_mは変数bodysystemが宣言されているモジュールです。
リンカエラーメッセージで欠落しているシンボルの「マングリング」は、名前がモジュールからのものであることをコンパイラが認識していることを示しBODYSYSTEM
ますCOORDINATESSYSTEM_M
。そうでない場合、モジュール名とシンボル名をそのようにマングルすることができませんでした。持っています(コンパイラには異なる名前マングリング規則があります)。
これは、問題はおそらくコードのコンパイルにあるのではなく、リンク段階で問題が発生していることを示しています。
リンカに古いオブジェクトファイルを提供しているか、関連するオブジェクトファイルをまったく提供していないと思われます。
(私たちがここにいる間:
型にバインドされたプロシージャの使用は、これがFortran90ではないことを意味します-少なくともFortran2003です。21世紀へようこそ。
あなたはあなたの情報源に対して私的および公的な「部分」を持っていません-あなたが持っているのは私的および公的な声明です。PRIVATE
ステートメント内のキーワード自体は、モジュールのデフォルトのアクセシビリティがプライベートであることを示します。つまり、デフォルトでは、モジュールで定義または宣言されたものは、モジュールがUSE
'dである場所では使用できません。このようなプライベートステートメントがない場合、モジュールのデフォルトはパブリックです。PUBLIC
キーワードは、これらの識別子は、(プライベートによってデフォルトセットに反する)公開されていることを、その後の識別子を指定のリストが続きます。プライベートステートメントとパブリックステートメントの一般的な位置と数は、モジュールの仕様部分に表示されている限り、使用と暗黙のステートメントの後に重要ではありません。
USEステートメントのONLY指定子で識別子に名前を付けると、何も「呼び出され」ません。「このシンボルと、指定子にリストされている他のシンボルのみが、次のスコープで使用できるようになります」とだけ表示されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加