【问题标题】:How to pass data member as default argument to class method? [duplicate]如何将数据成员作为默认参数传递给类方法? [复制]
【发布时间】:2021-05-19 10:00:36
【问题描述】:

我正在创建一个递归函数来反转一个链表。

class LinkedList {

    node *head;

  public:
    node *reverse(/* Here, I want to pass the head as a default argument */);
}

我尝试过node *reverse(node *nd = this->head),但它引发了以下错误:

'this' 只能在非静态成员函数中使用

为什么会这样?我怎样才能实现我的目标?

【问题讨论】:

  • 改用重载

标签: c++


【解决方案1】:

您可能会创建重载:

class LinkedList {
    node *head;
public:
    node *reverse(node*);
    node *reverse() { return reverse(head); }
    // ...
};

【讨论】:

    【解决方案2】:

    问题是,默认参数应该从调用者上下文中提供,而 this 不存在。

    你可以提供一个重载。

    class LinkedList {
    
        node *head;
    
      public:
        node *reverse(...);
        node *reverse() { return reverse(this->head); }
    };
    

    【讨论】:

    • 所以如果我做对了,如果默认参数是static,它就会起作用,对吧?
    • @PriyanshulGovil 是的。然后你可以像node *reverse(node *nd = LinkedList::head);一样声明它。
    • 完美。这是有道理的!
    猜你喜欢
    • 2011-12-29
    • 2018-03-02
    • 2020-02-22
    • 1970-01-01
    • 2012-01-11
    • 2011-06-25
    • 2019-02-03
    相关资源
    最近更新 更多