私は経験豊富なプログラマーですが、高水準言語でしかありません。私は今、私の最初の本当に大きなプロジェクトをC++でやっています。なぜ.hを含めると.cppソースも一緒に来るのですか?
私は2つのクラス、ClassA
とClassB
を持っています。 ClassA
はClassBs
のインデックスであるため、ClassA
はClassB
が何であるかを知る必要があり、ClassB
は何かが変更されたときにインデックスを更新できるようにする必要があります。これらのクラスはどちらも独自の.h & .cppファイルです。私は他からそれぞれ含む考え出し
はちょうど無限再帰の原因となるので、私が代わりにmain.cpp
の初めに#include "ClassA.cpp"
と#include "ClassB.cpp"
を持つことにしました。これを実行すると、コンパイラはそれらのファイル内のすべてのクラスとメソッドの複数の定義について警告するようになりました。
いくつかの実験の後、私はClassA.h
とClassB.h
を含むことが望ましい動作を生成することを発見しました - しかし、私はこれらのクラスのプロトタイプしか含んでいません。確かに実際にそれらを作るコードは混同されることはありませんか?それでも、それはそうです。
ここでは何が起こっているのですか? を含めると、ClassA
の実際のコードも表示されるのはなぜですか?そして、なぜClassA.h
のすべてのインクルードがヘッダーシールドやそれが呼び出されているにもかかわらず "multiple definition"エラーを発生させる原因となるのは、ClassA.cpp
ですか?
を。実際の実装は、ClassA.oとClassB.oのリンク時に解決されます。 –
私はあなたの状況をよく理解していません。 'ClassA.h'と' ClassB.h'の両方をどこに入れましたか? 'main.cpp'では?また、実際のコードが表示されるのはどういう意味ですか? –
C++では、#includeディレクティブは、現在のファイル内のファイル内容のコピー・ペーストのみです。通常、.cppにコンパイルされたコードをコピーするのではなく、.hファイルのみをインクルードする必要があります –