首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型特征模板类的未解析外部符号

问类型特征模板类的未解析外部符号
EN

Stack Overflow用户
提问于 2016-11-17 11:20:36
回答 1查看 239关注 0票数 1

我有下面的代码用于实现标签调度

代码语言:javascript
复制
template <class T> struct tag
{
    typedef struct {} type;
   static const type value;
};

然后,我在几个定义中使用这个结构来提供函数的重载版本,由于某种原因,这些版本可能是不明确的。例如,我有一组接受单个参数unarchive的unarchiver ar函数。下面的类型使用类型特征来决定要使用的重载版本,从而确定要解压缩的类型。下面是一个解压缩数据包的示例:

代码语言:javascript
复制
packet HYP_NAMESPACE unarchive(unarchiver ar, typename tag<packet>::type)
{
    // Code here
}

这可以这样称呼:

代码语言:javascript
复制
unarchive(ar, tag<packet>::value);

这个代码对gcc和clang都很好,但是它在VS 2015中失败了。我只是遇到了一些错误,比如:

LNK2001未解决的外部符号"public: static::type const tag::value“(?value@?$tag@G@@2Utype@12@B)

struct tag声明位于它自己的头(.h)中,并且这些用法显示在所有的实现(.cpp)文件中。有人能找出原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 13:13:16

这是:static const type value;是静态成员变量value的声明,它是在其他地方定义变量的前提。

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

定义不仅仅是初始化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40653588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档