把友元函数的实现写到类的外面去时出现了问题
楼主的程序是这样的我定义了一个类模板,类模板里面的有一个结构体node:
现在这个类有一个友元函数travels(),当我把这个函数的实现写在类的内部的时候能够正常编译,但是当我把它的实现写到内的外部的时候出现了语法错误
程序代码:
template<typename T> class rbtree { private: struct node { T m_value; //node也要用到T ... }; ... public: ... //先序打印红黑树 friend void travels(rbtree<T>::node* root) { if (NULL != root) { //递归调用 if (NULL != root->m_left) travels(root->m_left); cout << root->m_value << endl; if (NULL != root->m_right) travels(root->m_right); } } };
现在我面临的问题是,如果把友元函数travels()的实现写到类的外面去?
我是这样写的,但是不正确啊
程序代码:
template<typename T> void travels(rbtree<T>::node* rt) { rbtree::node* r = rt; if (r != NULL) { if(NULL != r->m_left) travels(r->m_left); cout << r->m_value << endl; if(NULL != r->m_right)travels(r->m_right); } }
语法错误为:
程序代码:
rbTree.cpp:37:47: 警告:友元声明‘void travels(rbtree<T>::node*)’声明了一个非模板函数 [-Wnon-template-friend] friend void travels(rbtree<T>::node* rt); ^ rbTree.cpp:37:47: 附注:(如果这不是您原来的想法,请确定此函数模板已经声明过,并在这里的函数名后面添加 <>) rbTree.cpp:147:28: 错误:变量或字段‘travels’声明为 void void travels(rbtree<T>::node* rt) ^ rbTree.cpp:147:34: 错误:‘rt’在此作用域中尚未声明 void travels(rbtree<T>::node* rt)
谢谢关注