我在写一个表达式树。错误消息:无法将参数1从“节点*”转换为“节点”
节点类具有自己的实例作为成员左,右和父。
感谢James McNellis在this post,我宣布他们为指针。
class Node
{
public:
char *cargo;
int depth;
Node *parent;
Node *left;
Node *right;
//constructors/destructor:
Node(void);
Node(int a_depth, Node *pparent = __nullptr);
~Node();
//method:
void traverse_tree(Node n)
};
现在我尝试遍历树并将其打印出来(将文件“out”)。
递归调用'traverse_tree(left);'和'traverse_tree(右)';'
导致错误消息“无法将参数1从'节点*'转换为'节点'”。
Traverse_tree最初是以根节点作为参数调用的。
我觉得参数的声明“(节点n)”进行混淆编译器,它不知道
是否调用构造函数或没有。
如何将“left”和“right”传递给“traverse_tree”方法?
void Node::traverse_tree(Node n)
//utility to view the tree
{
if (((left) == __nullptr)||((right) == __nullptr))
{
return;
}
traverse_tree(right);
out<<' '<<n.cargo<<"\n";
traverse_tree(left);
return;
};
鳞片从我的目光落在了!当然。我保持与数据的行为。'在从第四行开始,我删除了n。从n.cargo开始,我在第一次返回之前添加了另一个“out <<''<< n.cargo <<”\ n“;”,以便显示叶节点。它的工作原理,除了它每前,货物返回8224,这样82241.0 8224 * 82249.0 8224- 82241.0 .... 我没有arguements调用它:root.traverse_tree();感谢您的教训! – 2010-06-20 18:57:58
8224问题解决了。“out <<”“<< cargo <<”\ n“;”“单引号改为双引号;”“ – 2010-06-20 20:59:14
@Peter,8224问题是因为''''是一个多字节字符常量,它变成了一个整数。两个空格(每个十六进制20或十进制32)给你常量32 * 256 + 32 = 8192 + 32 = 8224. – paxdiablo 2010-06-21 08:42:45