私はTag Dispatchingを実装するために使用し、次のコードがあります。未解決の外部シンボル
template <class T> struct tag
{
typedef struct {} type;
static const type value;
};
を私はその後、いくつかの理由のための関数のオーバーロードされたバージョンを提供するためのいくつかの定義では、この構造体を使用し、あいまいである可能性があります。たとえば、私はの単一のパラメータを取るunarchive
関数のセットを持っています。次の型は、使用するオーバーロードされたバージョンを決定するために型特性を使用し、したがってどの型を解凍するかを決定します。
packet HYP_NAMESPACE unarchive(unarchiver ar, typename tag<packet>::type)
{
// Code here
}
これがそうのように呼び出すことができます:ここでは、パケットunarchives例です
unarchive(ar, tag<packet>::value);
このコードは、gccと打ち鳴らすの両方で正常に動作しますが、私がちょうど束を得るVS 2015で失敗しています
ようなエラーのLNK2001未解決の外部シンボル "パブリック:静的構造体タグ::型のconstタグ::値"(?値@ $タグ@ G @@ 2Utype B @ 12 @)
struct tag
の宣言は、それ自身のヘッダ(.h)にあり、実装はすべての実装ファイル(.cpp)に表示されます。誰かがこれの原因を特定できますか?
ここで、静的メンバー変数を明示的に定義していますか? – Jonas
うん..それは考えていませんでした。私はしません。この場合、私は初期化に特定の値を必要としません。ゴミが含まれていれば、それはうまくいくはずです。あなたはそれがエラーの原因だと思いますか? –