c++ 成员函数作为函数指针参数传入
2012-08-19 18:56
621 查看
在编写二叉树图形化演示程序的时候,要实现二叉树的前序,中序、后序遍历,遍历的时候传入一个函数指针来处理遍历到的节点
另外有一个成员函数:目的是作为函数指针(节点处理函数)
但是在c++里面,将成员函数作为函数指针传入的时候会提示类型不匹配调用的时候 PreOrder(m_pTree,VisitList);会有下面的错误提示:
这个是因为成员函数和函数指针处理的编译模式 不一样
一个是thiscall,一个是__cdecl
解决方案:
修改有参数为成员函数指针的函数如下:
在需要调用PerOrder函数地方取函数指针
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++.net 定义类 将类对象作为函数参数传入另一个类 出现错误
- c++ 用指针将函数作为参数传参
- 用指针类型作为成员函数的参数
- c++之指针作为函数参数传递的问题
- C++指针作为函数的参数进行传递时需要注意的一些问题
- [C++]关于指针作为函数参数传递
- C++ 指针作为函数参数介绍
- 线程的封装技巧:把任意类的成员函数指针作为参数
- 指针类型作为成员函数的参数
- C++模板编程->成员函数指针模板参数
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 【C++】指针作为函数的参数
- C++——将成员函数作为参数
- C++模板编程->成员函数指针模板参数
- c++指针作为函数参数传递的问题
- c++之指针作为函数参数传递的问题
- C语言-----内存与指针(3) How 4000 do you pass a string to a function如何给一个函数传入字符串作为参数:
- C++中将数组的指针作为函数参数
- 我的c++学习(12)指针作为函数参数