私が持っているA.cppとB.cpp両方にヘッダーファイルが含まれていますheader.h。
その後、A.cppとの両方B.cppが に含まれますmain.cpp。
main.cppをコンパイルすると、ヘッダー ファイルheader.hが 2 回インクルードされているというエラーが発生します。
これを解決するには?
私が持っているA.cppとB.cpp両方にヘッダーファイルが含まれていますheader.h。
その後、A.cppとの両方B.cppが に含まれますmain.cpp。
main.cppをコンパイルすると、ヘッダー ファイルheader.hが 2 回インクルードされているというエラーが発生します。
これを解決するには?
ヘッダーファイルをで囲む必要があります
#ifndef MYFILE_H
#define MYFILE_H
// Contents of your file
#endif
これらはインクルードガードと呼ばれます。
2番目のポイント:.cppファイルを含めるのではなく、.hファイルのみを含める必要があります。
インクルードガードを使用します。ヘッダーで、たとえば:
// Header.h
#ifndef HEADER_H_
#define HEADER_H_
// code from original header.h
#endif
.cppまた、他のファイルにファイルを含めないでください.cpp。必要なヘッダーのみを含めます。
編集ヘッダーファイルがサードパーティのライブラリからのものであり、インクルードガードがない場合、私はそのライブラリを非常に疑っています。私はそれを落とします。ただし、インクルードガードのライブラリヘッダーを含め、独自のヘッダーを作成できます。
// FixedHeader.h
#ifndef HEADER_H_
#define HEADER_H_
#include "header.h"
#endif
次に#include "FixedHeader.h"。しかし、私は真剣に図書館を落とすでしょう。
ヘッダー ファイルを変更してガードを含めることができない場合は、次の 3 つの解決策が考えられます (最良のものから悪いものへと並べ替えられています)。
1 そのゴミは使わないでください。
2 ラッパー my_header.h を使用する
#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <header.h>
#endif // MY_HEADER_H
コードに header.h の代わりに my_header.h を含めます
3 .cpp ファイルでガードを使用する
#ifndef HEADER_H
#define HEADER_H
#include <header.h>
#endif // HEADER_H
ただし、一貫性を保つ必要があり、どこでも同じガードを使用する必要があります (それがソリューション 3 である理由です)