0

私が持っているA.cppB.cpp両方にヘッダーファイルが含まれていますheader.h

その後、A.cppとの両方B.cppが に含まれますmain.cpp

main.cppをコンパイルすると、ヘッダー ファイルheader.hが 2 回インクルードされているというエラーが発生します。

これを解決するには?

4

3 に答える 3

4

ヘッダーファイルをで囲む必要があります

#ifndef MYFILE_H
#define MYFILE_H

// Contents of your file

#endif

これらはインクルードガードと呼ばれます。

2番目のポイント:.cppファイルを含めるのではなく、.hファイルのみを含める必要があります。

于 2013-02-23T20:38:27.917 に答える
2

インクルードガードを使用します。ヘッダーで、たとえば:

// 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"。しかし、私は真剣に図書館を落とすでしょう。

于 2013-02-23T20:37:55.753 に答える
2

ヘッダー ファイルを変更してガードを含めることができない場合は、次の 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 である理由です)

于 2013-02-23T20:52:07.913 に答える