大佬教程收集整理的这篇文章主要介绍了c – 静态模板成员变量具有内部链接但未定义,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
file.hpp namespace bar { template<typename A> struct foo { static_assert(is_same<A,float>::value || is_same<A,double>::value,""); static void set_static_var(A const&X); // ... }; }
和
file.cpp namespace { template<typename A> struct foo_Traits { // lots of static code supporTing the implementation of bar::foo<> static A datum; }; template<> float foo_Traits<float>::datum; // no change if this is in global namespace template<> double foo_Traits<double>::datum; template struct foo_Traits<float>; template struct foo_Traits<double>; } namespace bar { template<typename A> void foo<A>::set_static_var(A const&X) { foo_Traits<A>::datum = x; } template struct foo<double>; // error only appears if these lines are present. template struct foo<float>; // but without these lines,the whole file is void. }
并且我在变量foo_Traits<> :: datum(以及后来的链接失败)上得到了上述错误.编辑中添加的注释我使用了clang -std = c 11 -stdlib = libc(版本3.3),它只产生了一个警告,但是(正如我所说)在我的实际应用程序中,警告由链接失败备份(确切地说所述符号丢失了).但是,gcc没有编译器警告.也许这是一个铿锵的bug?结束说明
定义这些变量的正确方法是什么?请注意,在anonymouns命名空间之外声明它们将无法编译.还要注意,AFAIK,与普通非模板相同的构造才起作用.
注意我不是在问如何规避这个问题(我能想到自己),但是如何正确地完成这个问题.
以上是大佬教程为你收集整理的c – 静态模板成员变量具有内部链接但未定义全部内容,希望文章能够帮你解决c – 静态模板成员变量具有内部链接但未定义所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。