5

私は、frankenstein や 1 ファイルの数千行のプログラムから、適切に構造化され、組織化された複数ファイルのプログラムへの移行に取り組んでいます。今のところ (素朴に) 自然に思えるのは、3 つのファイルのヘッダー インクルードのラブ トライアングルを作成
する
こと
です
。他のファイル間で必要なメソッド、構造体など。

そしてもちろん、二重包含エラーが発生しています。

私の質問:ヘッダーでプリプロセッサ ディレクティブを使用してこれらの問題を回避する必要があります (たとえば、構造体、メソッドなどを完全にヘッダーに含める)、またはメイクファイルを使用してコンパイルする必要があります (この問題の解決にも使用できると聞いています- --しかし、私はそれを作ったことがない)?

4

4 に答える 4

13

必要なときにいつでも共通ヘッダー ファイルをインクルードできるように、常にインクルード ガードを使用する必要があります。これは、Makefile や使用するビルド ツールとはまったく関係ありません。

また、可能であれば循環依存を避けるようにしてください。それ以外の場合は、前方宣言を使用してそれらを解決する必要があります。

于 2011-02-15T07:09:59.907 に答える
1

ヘッダファイル

ヘッダー ファイルには、絶対に必要なヘッダー ファイルのみを含める必要があります。これは、クラスから派生した場合、または別のヘッダー ファイルからクラスをメンバーとして明示的に使用した場合を意味します。

クラスへの参照またはポインターのみを使用する場合は、それを前方宣言するだけです (ヘッダー ファイルを含めないでください)。

このようにして、循環ヘッダーの包含を解除できます。

注: ヘッダー ファイルのユーザーには明らかではない複数のパスを介してヘッダーが含まれる可能性があるため、常にヘッダー ガードを使用する必要があります。

于 2011-02-15T08:11:05.203 に答える