gpt4 book ai didi

c++ - 类型特征模板类的未解析外部符号

转载 作者:行者123 更新时间:2023-11-30 05:20:26 25 4
gpt4 key购买 nike

我有以下用于实现 Tag Dispatching 的代码:

template <class T> struct tag
{
typedef struct {} type;
static const type value;
};

然后我在几个定义中使用这个结构来提供函数的重载版本,由于某种原因,这些版本可能是模棱两可的。例如,我有一组采用单个参数 unarchiver arunarchive 函数。后面的类型使用类型特征来决定要使用的重载版本,从而确定要取消存档的类型。这是一个取消存档数据包的示例:

packet HYP_NAMESPACE unarchive(unarchiver ar, typename tag<packet>::type)
{
// Code here
}

可以这样调用:

unarchive(ar, tag<packet>::value);

此代码适用于 gcc 和 clang,但它在 VS 2015 中失败了。我只是收到一堆错误,例如:

LNK2001 unresolved external symbol "public: static struct tag::type const tag::value" (?value@?$tag@G@@2Utype@12@B)

struct tag 声明位于其自身的 header (.h) 中,其用法出现在整个实现 (.cpp) 文件中。谁能找出造成这种情况的原因?

最佳答案

这个:static const type value;是静态成员变量的声明 value , promise 该变量将在其他地方定义。

这个:template <class T> const typename tag<T>::type tag<T>::value;是一个定义。

定义不仅仅是初始化。

关于c++ - 类型特征模板类的未解析外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com