ヘッダーの循環依存とは何かを知っていると思います。通常、その結果は次のようになります。
エラー: 'MyClass' はこのスコープで宣言されていません
プログラムが短い場合、何をすべきかは明らかです。しかし、プログラムに数十のファイルがある場合...
私の質問は、「循環依存関係を見つけるアルゴリズムはありますか?」です。「コードが見つかるまで調べる」だけでなく、成功に導くいくつかの特定の手順を意味します。
何かのプログラムかもしれませんが、それを行うのはどれですか?
ヘッダーの循環依存とは何かを知っていると思います。通常、その結果は次のようになります。
エラー: 'MyClass' はこのスコープで宣言されていません
プログラムが短い場合、何をすべきかは明らかです。しかし、プログラムに数十のファイルがある場合...
私の質問は、「循環依存関係を見つけるアルゴリズムはありますか?」です。「コードが見つかるまで調べる」だけでなく、成功に導くいくつかの特定の手順を意味します。
何かのプログラムかもしれませんが、それを行うのはどれですか?
私が知っている少なくとも 1 つのコンパイラ (Visual C++) には、インクルードの順序を追跡するのに役立つ "show includes" というオプションがあります。これにより、サイクルが発生する場所を見つけることができます。コンパイラにそのようなオプションがない場合は、ファイルの先頭に #pragma message (または同等のもの) を追加してトレースできます。
ドキュメンテーション ツール Doxygen は、依存関係を示す図を生成できます。これを使用して、異なるライブラリのヘッダー ファイル間の循環依存関係を示しました。
しかし、プログラムに数十のファイルがある場合...
それでもまだ短いです。コンパイラのエラーメッセージに記載されている行に移動し、ここでクラスが使用可能かどうかを確認します。* .cppで問題が発生した場合は、対応するファイルを#includeします。ヘッダーで問題が発生した場合は、前方宣言(class MyClass;
)を追加します。前方宣言が十分でない場合は、myclassを宣言する#includeファイル。これにより循環依存が発生する場合は、ヘッダーごとのタイプが多すぎます。ヘッダーをいくつかの小さなヘッダーに分割します。これを行う1つの方法は、プログラム全体のヘッダーごとに1つのクラスを用意することですが、多くのシナリオでは、これはやり過ぎになる可能性があります。