#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» не дает действительный токен предварительной обработки
Есть идеи?
:: уже является отдельным токеном, вам не нужен оператор вставки токена ## для кода, который вы показали.
::
##
Удалите символы ##, поскольку они не разрешены в этом контексте. ## - объединение битов для создания токена, но :: должен быть одним токеном, а bb должен быть другим, отдельным токеном.
Ваш код не имеет большого смысла, так как в области видимости нет символа aa. Возможно, вы пытаетесь привести аргумент в ваш макрос? Если это так, то вы хотите:
aa
#define AA(bb) string(#bb)
Это тогда преобразовало бы AA(aa) в string("aa")
AA(aa)
string("aa")