3

次のコードは、VS2005 で発生したエラーを再現しています: I have a template function like

template <typename T> bool foo(T x, T y) {
    struct bar {
    public:
        T t;
        bool CompLT(const bar& that) {
            return (this->t) < (that.t);
        }
    };
    bar X, Y;
    X.t = x;
    Y.t = y;
    return X.CompLT(Y); 
}

ヘッダーファイルにAh . 2 つのコンパイル ユニットB.cppC.cppでヘッダーを使用すると、VS2005 でエラーが発生します。

error LNK2005: "public: bool __thiscall `bool __cdecl foo<float>(float,float)'::`2'::bar::CompLT(struct `bool __cdecl foo<float>(float,float)'::`2'::bar const &)" (?CompLT@bar@?1???$foo@M@@YA_NMM@Z@QAE_NABU1?1???$foo@M@@YA_NMM@Z@@Z) is already defined in B.obj .

このエラーを修正するにはどうすればよいですか? これは VS2005 の問題ですか、それとも構造体の定義をローカル関数スコープから移動してテンプレートにする必要がありますか?

4

2 に答える 2

0

インクルードガードを使用しましたか?

以下を追加して、任意のオブジェクト ファイル (末尾が .o) を削除してみてください。

#ifndef A_H
#define A_H

//your header

#endif
于 2013-10-21T08:55:37.460 に答える