【问题标题】:How to set the Return Type of a Class Member Function as the object of a Private Struct如何将类成员函数的返回类型设置为私有结构的对象
【发布时间】:2018-11-07 14:32:51
【问题描述】:

很抱歉标题冗长而令人困惑,但我想不出更好的方法来问这个问题。所以,我有一个类:

template <typename T>
class Set
{
    public:
        //random member functions here
    private:
        struct Node{
            T key;
            Node *right;
            Node *left;
            int height;
        };
    public:
        Node* r_add(Node *temp);
};


Node* Set<T>::r_add(Node *temp)
{
    return temp;
}

当我尝试实现函数 r_add 时,我不断收到错误消息,即外部定义的返回类型与 r_add 函数声明中的返回类型不同。当我尝试在类成员函数中调用私有结构时,我不清楚如何声明返回类型。

【问题讨论】:

    标签: c++ class namespaces structure


    【解决方案1】:

    语法应该是:

    template <typename T>
    Set<T>::Node* Set<T>::r_add(Node *temp)
    {
        return temp;
    }
    

    请注意,您不必使用Set&lt;T&gt;::Node* 作为参数类型,因为此时Set&lt;T&gt; 的范围将用于Node

    另一种选择是使用尾随返回类型。这将使您避免在不必要的情况下输入Set&lt;T&gt;

    template <typename T>
    auto Set<T>::r_add(Node *temp) -> Node*
    {
        return temp;
    }
    

    【讨论】:

    • 也可以使用尾随返回类型语法,以避免重复Set&lt;T&gt;::
    【解决方案2】:
    template <typename T>
    typename Set<T>::Node* Set<T>::r_add(typename Set<T>::Node* temp)
    {
        return temp;
    }
    

    这是我对map 的实现,您可以找到解决问题的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多