- 論壇徽章:
- 0
|
在va_arg 中使用template 的問題
今天寫了一個模板類,其中用到了va函數(shù)(可變參數(shù)函數(shù))。
在調(diào)用 va_arg時編譯出錯了,
那句話是這樣寫的:
value = va_arg( parms , template * );
編譯的時候報出error: `va_arg' was not declared in this scope。
這個錯誤報的很奇怪,我已經(jīng)添加了#include
并且在以前(value = va_arg( parms , template * );)還好好的,就是剛才把 template添加了一個參數(shù)啊。
后來發(fā)現(xiàn)是因為va_arg是一個宏,她定義在/usr/lib/gcc/i386-redhat-linux//include/stdarg.h中,在宏展開是把"template"中的逗號當成宏參數(shù)分隔符了,這樣在編譯器看來va_arg就有3個參數(shù),和頭文件中的宏定義參數(shù)個數(shù)不符合,所以報出了`va_arg'沒有定義。
解決方法:
typedef template * temp_ptr;
//也可以用#define temp_ptr template *
//因為在外層宏(va_arg)展開時,自己定義的這個內(nèi)層宏還沒有展開,
//所以不會出現(xiàn)剛才上面那個問題。
value = va_arg( parms , temp_ptr );
搞定。哎,宏啊宏
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/86948/showart_2057449.html |
|