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

    using namespace std; 

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

      AA(aa); 
    } 

這給了我一堆錯誤,但我想了解這個錯誤:C++預處理錯誤代碼

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

任何想法?

回答

2

::已經是一個單獨的令牌,您不需要##令牌粘貼操作符爲您顯示的代碼。

2

刪除##字符,因爲它們在這種情況下是不允許的。 ##是連接位來創建一個標記,但::應該是一個標記,無論bb應該是另一個單獨的標記。

1

由於在範圍內沒有符號aa,所以您的代碼沒什麼意義。也許你試圖將參數串聯到你的宏?如果是這樣,你想要的是:

#define AA(bb) string(#bb) 

這則轉換AA(aa)string("aa")