2011-08-06 9 views
0

私の大学のためのプロジェクトを作っていますが、そこに問題が発生しました。私はここに戻ってくることを知っていました。C++でヘッダファイルを整理する

多くのファイル(私にとっては10-12 ..)が多く、それぞれにヘッダファイルがあります。

登録フォルダ::私は次のように別々のフォルダを作ってきたRegistersName.h Register.h(* == corresponfing CPP)ファイル* .cppファイルを
データベースフォルダ:RegisterDB.h InstructionDB.h * .cppファイル
Instrucionフォルダ: Instrucion.h * .cppファイル
コンパイラフォルダ:compiler.hの* .cppファイル
コマンドフォルダ:Command.h * .cppファイル

は現在、これらのヘッダファイルの多くは、私は含める必要はありtherforeお互いを "見て" いますそれら.. ..

私は、私は心からそれはそれを行うための書き込み方法ではないと思われる

#include "../Database/RegisterDB.h" 
#include "../Register/Register.h" 
#include "../Register/RegistersName.h" 

ファイルcompiler.hのでは

のように含める必要があります。ここにいくつかのファイルをシフトし、プロジェクトが台無しになるから。:( 私を導いてください。

おかげで毎回私を助けて。

答えて

0

の#include文はとグループ化されたをソートする必要があります。 C++ Programming Style Guidelinesを見て、StackOverflowのスレッドを取ってください - Best practices for use of C++ header files.

#include "app/Database/RegisterDB.h" 
#include "app/Register/Register.h" 
#include "app/Register/RegistersName.h" 
+0

このアプリのフォルダはどこかにあり、g ++ -I "path_to_app" -c Cpp_files –

1

をお使いの各インクルードファイルは、はガードを含める必要があります。これは、ヘッダファイルを防ぎ

すべてヘッダファイルが必要です。ソースファイルに個別に必要な各ファイルを含めるのではなく、他のヘッダーファイルに含めることをお勧めしませんこれにより、特定のヘッダーがもはや必要なくなり、削除された場合、その特定のヘッダーに必要な他のヘッダーファイルが含まれていると、コンパイルエラーが発生することがあります。

あなたのインクルードする場所のすべてのパスをインクルードパスに追加して、明示的なパスの言及を含めて遊ぶ必要がないようにします。

循環依存関係がある場合は、の前方宣言が通過します。

0

はい、ヘッダーファイルを移動すると、そのようなものを修正する必要があります。しかし、インクルードする必要がある場合は、インクルードする必要があります。

本当に他のヘッダーにヘッダーを含める必要がありますか?クラスが別のクラスを継承している場合など、時にはあなたが行うこともあります。しかし、実際にはソースファイルにヘッダーのみを含める必要がある場合、ヘッダーを別のヘッダーに入れることがあります。だからここで不必要なカップリングを作成していないことを確認してください。たとえば、のユーザでも、CompilerクラスのもRegisterDBクラスのものを使用する必要がありますか?あるいは、実装の詳細なので、Compiler.cppにのみ含まれるべきですか?

2

..\を使用して相対アドレス指定をスキップする必要があります。その理由は、が明らかにをカップリングに追加するためです。

あなたは、パスを含めるには、プロジェクトのディレクトリを追加します(ただし、ビルドシステムで行われている)と、彼らは個別に保つ必要があり、「サブプロジェクト」ているように感じる場合

#include "Database/RegisterDB.h" 
#include "Register/Register.h" 

のように含めることができます。

+0

Presson:これは、私はそれはあなたとあなたのプロジェクト次第です他にどこ –

+0

一部で再びそれらを使用する場合、同じヘッダファイルの複数のコピーがあるだろうということを意味しません。ライブラリを構築する場合は、ライブラリとともにヘッダファイルを配信する必要があります。次のプロジェクトでいくつかのコードを再利用する場合は、(おそらくライブラリとして)共有したり、他のプロジェクトによって変更された新しいコピーを作成したりすることができます。場合によります。 :-) –

関連する問題