我有下面的代碼,我用實施Tag Dispatching:解析外部符號traits模板類
template <class T> struct tag
{
typedef struct {} type;
static const type value;
};
然後我用這個結構在幾個定義提供的功能重載版本是,由於某種原因,可能會含糊不清。例如,我有一組unarchive
函數,它們採用單個參數unarchiver ar
。下面的類型使用類型特徵來決定要使用的重載版本,從而確定要取消歸檔的類型。下面是解檔包的例子:
packet HYP_NAMESPACE unarchive(unarchiver ar, typename tag<packet>::type)
{
// Code here
}
這可以被稱爲像這樣:
unarchive(ar, tag<packet>::value);
此代碼工作正常GCC和鐺,但它的失敗在VS 2015年我剛剛得到了一堆
樣的錯誤LNK2001解析的外部符號 「公用:靜態結構標籤:: const類型標籤::值」(?值@ $ @標籤@@ g^@ 2Utype 12 @ B)
struct tag
聲明在它自己的頭文件(.h)中,並且這些用法在整個實現(.cpp)文件中出現。任何人都可以找出這個原因嗎?
你在哪裏明確定義了你的靜態成員變量? – Jonas
嗯..沒有想到這一點。我不。在這種情況下,我不需要一個特定的初始化值,如果它包含垃圾,它應該沒問題。你認爲這是導致錯誤? –