代码中的C ++预处理错误

时间:2010-05-13 00:27:40

标签: c++ c-preprocessor

    #include "iostream"
    #include "string"

    using namespace std;

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

            AA(aa);
    }

这给了我一堆错误,但我试图理解这个错误:

  

pre.cpp:11:1:错误:粘贴“::”和“aa”没有提供有效的预处理令牌

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

删除##字符,因为在此上下文中不允许这些字符。 ##是连接位来生成一个令牌,但是::应该是一个令牌,而bb应该是另一个独立的令牌。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

由于范围中没有符号aa,因此您的代码毫无意义。也许你试图将参数字符串化为宏?如果是这样,你想要的是:

#define AA(bb) string(#bb)

然后,这会将AA(aa)转换为string("aa")