Ошибка предварительной обработки C ++ в коде - PullRequest
1 голос
/ 13 мая 2010
    #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 ]

2 голосов
/ 13 мая 2010

:: уже является отдельным токеном, вам не нужен оператор вставки токена ## для кода, который вы показали.

2 голосов
/ 13 мая 2010

Удалите символы ##, поскольку они не разрешены в этом контексте. ## - объединение битов для создания токена, но :: должен быть одним токеном, а bb должен быть другим, отдельным токеном.

1 голос
/ 13 мая 2010

Ваш код не имеет большого смысла, так как в области видимости нет символа aa. Возможно, вы пытаетесь привести аргумент в ваш макрос? Если это так, то вы хотите:

#define AA(bb) string(#bb)

Это тогда преобразовало бы AA(aa) в string("aa")

...