我在做一道c++模板题,描述如下:“为Array类创建一个模板。这个模板允许在编译的时候Array对象实例化指定元素个数的特定的元素类型。”而当我重载输入输出流函数的时候编译总是不通过。编译器显示:[Warning]frienddeclaration'std::istream&operator>>(std::istream&,Array&)'declaresanon-templatefunction[-Wnon-template-friend][Warning]frienddeclaration'std::ostream&operator>后面加上的话,会显示如下错误:[Error]template-id'operator>>'indeclarationofprimarytemplate所以现在举步维艰,完全没有头绪。还望各路大神能解答我的疑惑并解释一下为什么会出现以上三种错误。万分感谢!
2 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
首先静态成员变量count需要在类外定义。其次,问题主要出在试图将函数模板的某个特化声明为类的友元,标准貌似不支持这个(具体的wording没有找到)。同样的效果可以通过简单的在类模板内定义函数友元来实现:template classX{friendvoidfoo(T){/*...*/}};或将函数模板声明为类模板的友元:template classX{template friendvoidfoo(U);};
添加回答
举报
0/150
提交
取消