c++ 成员函数作为函数指针参数传入
来源:互联网 发布:家居设计软件哪个好 编辑:程序博客网 时间:2024/05/21 03:25
在编写二叉树图形化演示程序的时候,要实现二叉树的前序,中序、后序遍历,遍历的时候传入一个函数指针来处理遍历到的节点
void XXXX::InOrder(TreeNode * Tree,int (*func)(TreeNode * Tree)){if( ! Tree ) return ;InOrder(Tree->lchild,func);if ( !func(Tree) ) return; InOrder(Tree->rchild,func);}}
另外有一个成员函数:目的是作为函数指针(节点处理函数)
int XXXX::VisitList(TreeNode *Tree){//Do Sth return 1;}
但是在c++里面,将成员函数作为函数指针传入的时候会提示类型不匹配调用的时候 PreOrder(m_pTree,VisitList);会有下面的错误提示:
error C2664: 'PreOrder' : cannot convert parameter 2 from 'int (struct tagTreeNode *)' to 'int (__cdecl *)(struct tagTreeNode *)' None of the functions with this name in scope match the target type
这个是因为成员函数和函数指针处理的编译模式 不一样
一个是thiscall,一个是__cdecl
解决方案:
修改有参数为成员函数指针的函数如下:
void XXXX::PreOrder(TreeNode * Tree,int (CMyTreeDlg::*func)(TreeNode * Tree)){if( ! Tree ) return ;if ( !( this->*func)(Tree) )return;PreOrder(Tree->lchild,func);PreOrder(Tree->rchild,func);}
在需要调用PerOrder函数地方取函数指针
void XXXX::OnButtonPreorder() { int (CMyTreeDlg::*pfunc)(TreeNode *); //声明一个和参数类型一样的函数指针 pfunc =& CMyTreeDlg::CreateVisitList; //指针指向要调用的函数 PreOrder(m_pTree,pfunc); //将声明的指针看作参数传入}
- c++ 成员函数作为函数指针参数传入
- c++ 成员函数作为函数指针参数传入
- 指针作为参数传入函数的陷阱
- 指针类型作为成员函数的参数
- 指针类型作为成员函数的参数
- 指针类型作为成员函数的参数
- 指针类型作为成员函数的参数
- [C++]关于指针作为函数参数传递
- c语言 指针作为函数参数
- C语言指针变量作为函数参数
- [C++]关于指针作为函数参数传递
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- 【C++】指针作为函数的参数
- C指针作为函数参数引用
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- mini2440 tq2440 vivi uboot 去除nandflash坏块
- Java Math.round() ---学习笔记
- jdk5 CountDownLatch
- MSSQL Server 2005 Express 配置
- POJ 1679 The Unique MST 次小生成树
- c++ 成员函数作为函数指针参数传入
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- 暂无
- 关于gcc中tree和rtl的定义
- 拉杆箱大小对照图
- java单例
- HTTP请求头的具体含意
- 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
- hdu 3530 Subsequence(DP+单调队列优化)