为了账号安全,请及时绑定邮箱和手机立即绑定

c++重载输入输出函数时怎么解决 “[Warning] declares a non-template function”?

c++重载输入输出函数时怎么解决 “[Warning] declares a non-template function”?

慕斯709654 2019-05-21 10:35:11
我在做一道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);
};
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 1356 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信