游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2584|回复: 2

这里为什么加个static就可以了喃?

[复制链接]

10

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2011-8-25 22:40:00 | 显示全部楼层 |阅读模式
#pragma once
using namespace std;
#include<iostream>
#include<string>

template<class NodeType>
class MyTreeNode
{
public:
        typedef struct BTNode
        {
                NodeType _data;
                struct BTNode *_lchild;
                struct BTNode *_rchild;
        }BTNode,*BTNodePtr;

        MyTreeNode()
        {
                _root = new BTNode();
                _root->_lchild = NULL;
                _root->_rchild = NULL;
        }
        void PreOrderCreateBinaryTree()
        {
                PreOrderCreateBinaryTree(_root);
        }
        void PreOrder()
        {
                PreOrder(visit,_root);
        }
private:
        static void visit(BTNodePtr root)                     ----------------这里为什么要加static
        {
                cout << root->_data<<endl;
        }
        void PreOrderCreateBinaryTree(BTNodePtr& root)
        {
                int node;
                cout << "请输入结点:" << endl;
                cin >> node;
                if(node != -1)
                {
                        if(!root)
                                root = new BTNode();   
                        root->_data = node;
                        PreOrderCreateBinaryTree(root->_lchild);
                        PreOrderCreateBinaryTree(root->_rchild);
                }
        }
        void PreOrder(void (*p_visit)(BTNodePtr t),BTNodePtr root)
        {
                if(root)
                {
                        p_visit(root);
                        PreOrder(p_visit,root->_lchild);
                        PreOrder(p_visit,root->_rchild);
                }
        }

        BTNodePtr _root;
};
----------------------------------------------------------------------------------------------
#include<iostream>
#include<string>
#include"MyTreeNode.h"

using namespace std;


void main()
{
        MyTreeNode<int> BTree;
        BTree.PreOrderCreateBinaryTree();
        BTree.PreOrder();
        system("pause");
}

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2011-8-27 07:59:00 | 显示全部楼层

Re:这里为什么加个static就可以了喃?

因为你不加static 表示的是一个成员函数指针而不是一个函数指针
成员函数指针必须认定这个函数是属于那个对象的,否则编译不过

0

主题

58

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2011-8-29 17:47:00 | 显示全部楼层

Re:这里为什么加个static就可以了喃?

如果真想用成员函数指针,就得传这种参数 void (MyTreeNode<NodeType>::*p_visit)(BTNodePtr t) ,不过除非为了写得奇葩点这里完全用不上传成员函数指针
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 13:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表