2010-05-13 115 views
1
#include "iostream" 
    #include "string" 

    using namespace std; 

    #define AA(bb) \ 
      string(::##bb); 
    int main (int argc, char *argv[]) 
    { 

      AA(aa); 
    } 

这给了我一堆错误,但我想了解这个错误:C++预处理错误代码

pre.cpp:11:1: error: pasting "::" and "aa" does not give a valid preprocessing token

任何想法?

回答

2

::已经是一个单独的令牌,您不需要##令牌粘贴操作符为您显示的代码。

2

删除##字符,因为它们在这种情况下是不允许的。 ##是连接位来创建一个标记,但::应该是一个标记,无论bb应该是另一个单独的标记。

1

由于在范围内没有符号aa,所以您的代码没什么意义。也许你试图将参数串联到你的宏?如果是这样,你想要的是:

#define AA(bb) string(#bb) 

这则转换AA(aa)string("aa")