0

次のように、2 つの異なるインクルード ファイルからの再定義を避けたいと思います。

ファイルABC.h

extern int v=1;

ファイルfoo.h

#include "ABC.h"
class Foo
#ifdef BLA
: public ABC
#endif

{
    ...
};

ファイルbar.h

extern int v=3;

主要:

#define BLA
#include <foo.h>
#include <bar.h>

基本的fooに私が書いたクラスでbar、サードパーティのライブラリです。しかし、うまくいかないようです。どうすれば問題を解決できますか?

申し訳ありませんが、説明するのが少し難しいです。競合する部分は実際には変数ではなく#define、コードの大きなブロックにラップされているようなものなので、この例はちょっと悪いです (エラーメッセージは「`__vector_17' の複数の定義」)。名前空間を使用せずに解決する方法はありますか?

4

2 に答える 2

1

名前空間を使用すると、この問題を解決できます。

namespace foo
{
    int val =1;
}

namespace bar
{
    int val =3;
}

using namespace foo;

int x = val; //Now x will be assigned with 1
于 2013-04-10T20:42:27.117 に答える
0

名前空間が必要です。

namespace foo
{
    int v =100;
}

namespace bar
{
    int v =500;
}
于 2013-04-10T20:46:41.277 に答える