【问题标题】:how do i send a method in a template class a print function from main c++我如何在模板类中发送方法从主 C++ 打印函数
【发布时间】:2018-03-15 00:12:35
【问题描述】:

这是我正在尝试使用的打印功能,但它不起作用。目前它在 main() 文件中,但在 main() 本身之外。我不断得到一个 c2228:“.data”左侧必须有类/结构/联合 我根本不是编码方面的专业人士,并且无法弄清楚这一点。因为它是一个模板,所以我假设 p 还不是任何东西,并且不能传递给 inorder 函数,问题是我该如何解决这个问题,我找不到任何接近我理解的东西。请给出一个可行的示例或解决方案,并且尽可能接近新手级别。谢谢!

template <class Entry>
void print(Entry&);
template <class Entry>
void print(Entry& p)
{
    cout << p.data << endl;
}

这是我正在尝试使用的功能。我需要对 AVL 树进行迭代中序遍历,并使用这个传递的打印函数来访问和打印来自节点的数据。

声明

void inorder(void(*visit)(Entry &));

实现

template<class Entry>
inline void Binarytree<Entry>::inorder(void(*visit)(Entry &))
{
}

调用main()

tree.inorder(print);

【问题讨论】:

    标签: c++ templates pointers member-function-pointers


    【解决方案1】:

    看起来您在二叉树中使用的Entry 类型没有名为data 的成员。你的树中有哪些条目?整数,还是某个类?

    无论如何,下面是一个编译代码示例:

    template <class Entry>
    void print(Entry& p)
    {
        std::cout << p.data << std::endl;
    }
    
    template<class Entry>
    class BinaryTree
    {
    public:
        vector<Entry> items;
        inline void inorder(void(*visit)(Entry &))
        {
            for (auto& it : items)
            {
                visit(it);
            }
        }
    };
    
    class SomeType
    {
    public:
        int data;
    };
    
    int main()
    {
        BinaryTree<SomeType> a;
        a.inorder(print);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2021-11-11
      • 2022-01-06
      • 2021-11-26
      • 1970-01-01
      • 2017-01-22
      相关资源
      最近更新 更多