我编写了Node类的成员函数,以后缀顺序读取节点树。
它将由Node实例调用,该实例是树的根节点。
所以:N.postfix();
这些似乎是非法的:*this->left.postfix();
*this->right.postfix();
这样做的正确方法是什么?
class Node
{
public:
const char *cargo;
int depth;
Node *left;
Node *right
void Node::postfix()
{
if (this==__nullptr)
{
return;
}
else
{
*this->left.postfix();
*this->right.postfix();
out<<*this->cargo<<"\n";
return;
}
};
答案 0 :(得分:10)
在成员函数中,通常不需要使用this
来访问类成员;你可以简单地使用:
left->postfix();
等
如果您有函数参数或与类成员变量同名的其他局部变量,您可以使用this
来引用成员变量,例如,
this->left->postfix();
您的代码非法的原因是它没有正确地将left
视为指针。您需要使用left
取消引用->
才能访问其成员,如此处的正确代码所示。 (你也可以使用等效的(*left).postfix()
,但这只会让你使用更多的括号而没有真正的好处。)
在表达式的开头使用间接运算符*
也是不正确的,因为它应用于postfix()
的结果(即,它取消引用{{1}返回的任何内容})。 postfix()
没有返回任何内容,所以这是一个错误。请务必记住,postfix()
和.
运算符的优先级均高于->
。
答案 1 :(得分:6)
->
运算符取消引用指针,因此额外的*
会导致问题。你可以这样做:
this->left->postfix();
或者这个:
(*this).left->postfix();
答案 2 :(得分:1)
*this->left.postfix();
“取消引用在此”左“成员变量上调用postfix()的返回值。”
this->left->postfix();
//or
(*this->left).postfix();
“在解除引用的'左'成员变量上调用postfix()。”