0

使用しようとしている基本ファイルがあります。

#ifndef POINT_GUARD
#define POINT_GUARD

//------------------------------------------------------------------------------

struct Point {
    int x, y;
    Point(int xx, int yy) : x(xx), y(yy) { }
    Point() :x(0), y(0) { }
};

//------------------------------------------------------------------------------

inline bool operator==(Point a, Point b) { return a.x==b.x && a.y==b.y; } 

//------------------------------------------------------------------------------

inline bool operator!=(Point a, Point b) { return !(a==b); }

//------------------------------------------------------------------------------

#endif // POINT_GUARD

ガードに包まれていることに注意してください。これで、これが2つの異なるファイルにインポートされます。ただし、エラーが発生します。

struct Pointそれが「ポイントの再定義」であるとヒットするとすぐに文句を言います。ここで何が起こっているのか考えてみませんか?

4

1 に答える 1

1

与えられた入力ではエラーを再現できません。私はあなたのコードをに置き、test.hこれを次のように書きましたtest.cpp

#include "test.h"
#include "test.h"

実行g++ -Wall -c test.cppしてもエラーや警告は発生せず、プリプロセッサを介して実行すると、struct Pointが1回だけ宣言されていることが示されるため、ガードは機能しています。

あなたが引用したコードの外のどこかに同じ名前の宣言があると思いますか?

于 2012-11-06T06:50:41.890 に答える