h*****g 发帖数: 944 | 1 谢谢大家帮我看看,我实在不知道为啥错了
#include
using namespace std;
template< class T>class TreeNode{
public:
T data;
TreeNode(T v);
TreeNode *left;
TreeNode *right;
friend ostream &operator<<(ostream &stream, TreeNode &o);
};
template TreeNode ::TreeNode(T v)
:data(v), left(NULL), right(NULL)
{
}
template ostream &operator<<(ostream &stream, TreeNode &o){
stream<data<<" ";
}
int main(){
TreeNode * head = new TreeNode (2);
cout<
} |
r*******y 发帖数: 1081 | 2 illegal conversion from pointer to reference.
【在 h*****g 的大作中提到】 : 谢谢大家帮我看看,我实在不知道为啥错了 : #include : using namespace std; : template< class T>class TreeNode{ : public: : T data; : TreeNode(T v); : TreeNode *left; : TreeNode *right; : friend ostream &operator<<(ostream &stream, TreeNode &o);
|
s*****n 发帖数: 231 | 3 template ostream &operator<<(ostream &stream, TreeNode &o){
stream<data<<" ";
//add your return value here!
return stream;
} |
s*****n 发帖数: 231 | 4 And yes, as romancity pointed out:
stream<data<<" ";
should be
stream< |
h*****g 发帖数: 944 | 5 谢谢啊
好像我pass到那个override function的变量是个pointer, 所以要o->data吧
不然的话是不是要写成一下的样子?
template ostream &operator<<(ostream &stream, TreeNode *&o){
【在 s*****n 的大作中提到】 : And yes, as romancity pointed out: : stream<data<<" "; : should be : stream<
|
h*****g 发帖数: 944 | 6 请问正确的该怎么写啊?
【在 r*******y 的大作中提到】 : illegal conversion from pointer to reference.
|
c****o 发帖数: 1280 | 7 the operator is also a template operator, you need to first claim it as a
template operator, like
template
class TreeNode;
template
ostream & operator <<(ostream & stream, TreeNode & O)
template
class TreeNode{
...
friend ostream &operator<< <>(ostream &stream, TreeNode &o);
..
};
template
then implement the operator
【在 h*****g 的大作中提到】 : 谢谢大家帮我看看,我实在不知道为啥错了 : #include : using namespace std; : template< class T>class TreeNode{ : public: : T data; : TreeNode(T v); : TreeNode *left; : TreeNode *right; : friend ostream &operator<<(ostream &stream, TreeNode &o);
|