4

ヘッダーの循環依存とは何かを知っていると思います。通常、その結果は次のようになります。

エラー: 'MyClass' はこのスコープで宣言されていません

プログラムが短い場合、何をすべきかは明らかです。しかし、プログラムに数十のファイルがある場合...

私の質問は、「循環依存関係を見つけるアルゴリズムはありますか?」です。「コードが見つかるまで調べる」だけでなく、成功に導くいくつかの特定の手順を意味します。

何かのプログラムかもしれませんが、それを行うのはどれですか?

4

3 に答える 3

0

私が知っている少なくとも 1 つのコンパイラ (Visual C++) には、インクルードの順序を追跡するのに役立つ "show includes" というオプションがあります。これにより、サイクルが発生する場所を見つけることができます。コンパイラにそのようなオプションがない場合は、ファイルの先頭に #pragma message (または同等のもの) を追加してトレースできます。

于 2012-05-05T17:09:37.950 に答える
0

ドキュメンテーション ツール Doxygen は、依存関係を示す図を生成できます。これを使用して、異なるライブラリのヘッダー ファイル間の循環依存関係を示しました。

于 2012-05-05T15:28:47.770 に答える
-1

しかし、プログラムに数十のファイルがある場合...

それでもまだ短いです。コンパイラのエラーメッセージに記載されている行に移動し、ここでクラスが使用可能かどうかを確認します。* .cppで問題が発生した場合は、対応するファイルを#includeします。ヘッダーで問題が発生した場合は、前方宣言(class MyClass;)を追加します。前方宣言が十分でない場合は、myclassを宣言する#includeファイル。これにより循環依存が発生する場合は、ヘッダーごとのタイプが多すぎます。ヘッダーをいくつかの小さなヘッダーに分割します。これを行う1つの方法は、プログラム全体のヘッダーごとに1つのクラスを用意することですが、多くのシナリオでは、これはやり過ぎになる可能性があります。

于 2012-05-05T16:20:29.920 に答える