免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1102 | 回复: 0

在va_arg 中使用template 的问题 [复制链接]

论坛徽章:
0
发表于 2009-09-22 11:46 |显示全部楼层
在va_arg 中使用template 的问题
今天写了一个模板类,其中用到了va函数(可变参数函数)。

在调用 va_arg时编译出错了,

那句话是这样写的:
value = va_arg( parms , template * );

编译的时候报出error: `va_arg' was not declared in this scope。

这个错误报的很奇怪,我已经添加了#include
并且在以前(value = va_arg( parms , template * );)还好好的,就是刚才把 template添加了一个参数啊。

后来发现是因为va_arg是一个宏,她定义在/usr/lib/gcc/i386-redhat-linux//include/stdarg.h中,在宏展开是把"template"中的逗号当成宏参数分隔符了,这样在编译器看来va_arg就有3个参数,和头文件中的宏定义参数个数不符合,所以报出了`va_arg'没有定义。

解决方法:
typedef template * temp_ptr;
//也可以用#define temp_ptr template *
//因为在外层宏(va_arg)展开时,自己定义的这个内层宏还没有展开,
//所以不会出现刚才上面那个问题。
value = va_arg( parms , temp_ptr );

搞定。哎,宏啊宏



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86948/showart_2057449.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP