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

发布于 2024-09-01 20:54:07 字数 340 浏览 2 评论 0原文

    #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”不会给出有效的预处理标记

有什么想法吗?

    #include "iostream"
    #include "string"

    using namespace std;

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

            AA(aa);
    }

This gives me a bunch of errors but I am trying to understand this error:

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

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独闯女儿国 2024-09-08 20:54:07

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

:: is already a separate token, you don't need the ## token-pasting operator for the code you showed.

仙女 2024-09-08 20:54:07

删除 ## 字符,因为在此上下文中不允许使用它们。 ## 是连接位以形成令牌,但是 :: 应该是一个令牌,而 bb 应该是另一个单独的令牌。

Remove the ## characters as they are not allowed in this context. ## is to concatenate bits to make a token, but :: should be one token and whatever bb is should be another, separate, token.

转角预定愛 2024-09-08 20:54:07

您的代码没有什么意义,因为范围内没有符号 aa 。也许您试图将宏的参数字符串化?如果是这样,您想要的是:

#define AA(bb) string(#bb)

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

Your code makes little sense as there is no symbol aa in scope. Perhaps you trying to stringify the argument to your macro? If so, what you want is:

#define AA(bb) string(#bb)

This would then convert AA(aa) to string("aa")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文