Chinaunix首页 | 论坛 | 博客
  • 博客访问: 746292
  • 博文数量: 176
  • 博客积分: 2548
  • 博客等级: 少校
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-29 16:36
个人简介

爱咋咋地

文章分类

全部博文(176)

文章存档

2024年(1)

2023年(17)

2022年(19)

2021年(3)

2020年(1)

2018年(1)

2017年(1)

2014年(1)

2013年(4)

2012年(11)

2011年(19)

2010年(22)

2009年(71)

2008年(5)

分类: LINUX

2009-09-22 11:46:25

在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 );
 
搞定。哎,宏啊宏
 
阅读(1040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~