1

私は次の実装を持っています:

Aのヘッダー:

class A
{
public:
foo();
};

Aには、foo()の実装を含む独自の.cppファイルがあります。

//Bのヘッダー

#include "A.h"
class B
{
public foo();
};

注:Bには独自のヘッダーがありません

クラスC.cppで、AのヘッダーとBoSoの実装をC.cppで再利用したいと思います。

//C.cpp
#include "A.h"
....
B b;
b.foo();
..

上記をコンパイルすると、関数foo()の再宣言エラーが発生します。GNUコンパイラにBoを取得してAoを省略するように指示する方法があるかどうか知りたいです。または、実装を含むmakeファイルの最初のオブジェクトを考慮して残りを無視するようにコンパイラに指示しますか?

GNUv2.16を使用しています

4

1 に答える 1

2

あなたの問題は、 の再宣言に関するものです。Aなぜなら、 1つのthroughと他の throughC.cppの2つの宣言が表示されるため、ヘッダーガードをガードして、複数回含めることを避けるためです。通常、常にヘッダーをガードする必要があります。AA.hB.hA.h

#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif

A.h複数回インクルードすると、このガードは 2 番目のインクルードを何もしないようにします!

于 2012-11-30T06:01:07.280 に答える