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

    using namespace std; 

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

      AA(aa); 
    } 

Cela me donne un tas d'erreurs mais j'essaie de comprendre cette erreur:erreur prétraiter C++ dans le code

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

Toutes les idées? Supprimez les caractères ## car ils ne sont pas autorisés dans ce contexte.

Répondre

2

:: est déjà un jeton séparé, vous n'avez pas besoin de l'opérateur ## jeton-collage pour le code que vous avez montré.

2

## est de concaténer bits pour faire un jeton, mais :: devrait être un jeton et quel que soit bb est devrait être un autre, séparé, jeton.

1

Votre code a peu de sens car il n'y a pas de symbole aa portée. Peut-être que vous essayez de stringify l'argument à votre macro? Si oui, ce que vous voulez est:

#define AA(bb) string(#bb) 

Ce serait alors convertir AA(aa) à string("aa")