函数参数默认值顺序问题

lordmr 2009-08-12 10:38:00
我在写一个二叉排序树模板类的时候,想在中序遍历的时候指定一个函数(比如打印关键字什么的),
开始的时候这么写
void Inorder( Bstnode<T> *temp=root ,void(*f)=NULL(Bstnode<T> *));//f函数指针

定义如下
template <class T>
void BstTree<T>::Inorder( Bstnode<T>* temp=root,void(*f)=NULL(Bstnode<T>*)){

if(temp != NULL) {
Inorder(temp->lchild);
f(temp);
Inorder(temp->rchild);
}
} // 没有问题

后来在运用中我发现这样用每次想要设定函数值还要把temp人为设定成root很麻烦,于是把2个参数反过来写
void Inorder( void(*f)=NULL(Bstnode<T> *),const Bstnode<T> *temp=root ); //像这样
函数实体部分也该了,但是就出现错误了……

projects\二叉排序树\二叉排序树\bsttree.h(11) : error C2059: 语法错误 : “函数样式转换”
projects\二叉排序树\二叉排序树\bsttree.h(15): 参见对正在编译的类 模板 实例化“BstTree<T>”的引用
projects\二叉排序树\二叉排序树\bsttree.h(11) : error C2059: 语法错误 : “)”
projects\二叉排序树\二叉排序树\bsttree.h(11) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)

不明白是怎么回事,请高人讲解一下,谢谢了
...全文
276 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayw215 2009-08-12
  • 打赏
  • 举报
回复
void BstTree <T>::Inorder( Bstnode <T>* temp=root,void(*f)=NULL(Bstnode <T>*)){
----------
这都能编过么
taodm 2009-08-12
  • 打赏
  • 举报
回复
算你狠!你用的什么编译器?
piaomiaoju 2009-08-12
  • 打赏
  • 举报
回复
mark
lordmr 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]
void(*f)=NULL(Bstnode <T> *)
这是什么?楼主解释解释?
[/Quote]
想给一个函数指针附上一个空的初值
pengzhixi 2009-08-12
  • 打赏
  • 举报
回复
当你在给一个参数赋予默认实参的时候,请看看这个参数右边所有的参数是否都有默认实参了。如果没有,对不起 咔嚓!!
yshuise 2009-08-12
  • 打赏
  • 举报
回复
void(*f)(Bstnode <T> *)=NULL
starcat 2009-08-12
  • 打赏
  • 举报
回复
It is important to understand that all parameters that take default values must appear to the right of those that do not. For example, the following prototype is invalid:
// Wrong! void f(int a = 1, int b);
Once you’ve begun defining parameters that take default values, you cannot specify a nondefaulting parameter. That is, a declaration like the following is also wrong and will not compile:
int myfunc(float f, char *str, int i=10, int j); // Wrong!
pengzhixi 2009-08-12
  • 打赏
  • 举报
回复
void(*f)=NULL(Bstnode <T> *)
一直很努力相看懂,但还是被它打败了
coverallwangp 2009-08-12
  • 打赏
  • 举报
回复
有默认值的参数的要从左往右写,没有默认值的参数要放到右边,你的第二种写法是错误的。
taodm 2009-08-12
  • 打赏
  • 举报
回复
void(*f)=NULL(Bstnode <T> *)
这是什么?楼主解释解释?
yshuise 2009-08-12
  • 打赏
  • 举报
回复
不需要给默认参数吧,这样看起来代码很丑陋。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧