我编写了Node类的成员函数,以后缀顺序读取节点树.
它将由Node实例调用,该实例是树的根节点.
所以:N.postfix();
这些似乎是非法的:
*this->left.postfix();
*this->right.postfix();
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
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;
}
};
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 10
在成员函数中,通常不需要使用this来访问类成员; 你可以简单地使用:
left->postfix();
Run Code Online (Sandbox Code Playgroud)
等等
如果您有函数参数或其他与类成员变量同名的局部变量,您可以使用它this来引用成员变量,例如,
this->left->postfix();
Run Code Online (Sandbox Code Playgroud)
您的代码非法的原因是它没有正确地将其left视为指针.您需要取消引用left使用->,以访问其成员,如图正确的代码在这里.(你也可以使用等效的(*left).postfix(),但这只会让你使用更多的括号,没有真正的好处.)
*在表达式的开头使用间接运算符也是不正确的,因为它应用于结果postfix()(即,它取消引用返回的任何内容postfix()). postfix()没有返回任何东西,所以这是一个错误.重要的是要记住,.和->运算符都具有更高的优先级*.
该->运营商取消引用指针,所以额外的*会引起问题.你可以这样做:
this->left->postfix();
Run Code Online (Sandbox Code Playgroud)
或这个:
(*this).left->postfix();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |