【问题标题】:How to implement template throughout nested classes?如何在整个嵌套类中实现模板?
【发布时间】:2020-05-05 03:49:24
【问题描述】:

我正在尝试使用以下代码实现二叉树,我想自动创建在二叉树内部传递的类型的节点,但我不知道该怎么做。请帮忙。谢谢

template <typename X>
class binaryTree{
  template <typename X>
  class node{
    X data;
    node<X>* left;
    node<X>* right;
 };
};

【问题讨论】:

  • class node 中删除template &lt;typename X&gt;X 来自 binaryTree 将在所有内部类中隐式可用。
  • @DeiDei 也不是这样。
  • 嗯,有什么问题吗?你没有告诉我们你得到了什么错误,或者它们发生在哪里。 “不起作用”不是对问题的描述。没有办法帮忙。

标签: c++ templates inner-classes


【解决方案1】:

您不需要第二个template &lt;typename X&gt;。如果每个节点都拥有自己的左右节点,您也可以考虑删除析构函数中的leftright 指针。

#include <iostream>

template <typename X>
class binaryTree
{
public:

    class node
    {

    public:

        X data;
        node *left;
        node *right;

        ~node()
        {
            delete left;
            delete right;
        }
    };

    node root;
};

int main()
{
    binaryTree<int> tree{
        binaryTree<int>::node{ 
            1,
            new binaryTree<int>::node {2, nullptr, nullptr},
            new binaryTree<int>::node {3, nullptr, nullptr}
        }
    };

    auto& root = tree.root;
    std::cout << root.data << '\n' << root.left->data << '\n' << root.right->data << '\n';
}

输出:

1
2
3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多