2010-10-20 89 views
2

我試圖編譯從Boost.Preprocessor庫,是一個示例:在Visual Studio 2008中升壓預處理:樣品不工作

#include <boost/preprocessor/seq/insert.hpp> 
#define SEQ (a)(b)(d) 
BOOST_PP_SEQ_INSERT(SEQ, 2, c) // expands to (a)(b)(c)(d) 

,我得到的錯誤error C2065: 'b' : undeclared identifier

是否存在與樣品有問題或者我錯過了什麼?

請注意:序列定義本身是可以的。爲了證明這一點,我編這個代碼:

#include <boost/preprocessor/cat.hpp> 
#include <boost/preprocessor/seq/for_each.hpp> 

#define SEQ (w)(x) 

#define MACRO(r, data, elem) BOOST_PP_CAT(elem, data) 

struct w_ 
{ 
int x; 
}; 
void test() 
{ 
BOOST_PP_SEQ_FOR_EACH(MACRO, _, SEQ); 
    x_.x = 3; 
} 

聲明:此代碼是跆拳道的代碼,我從來沒有打算用BOOST PP這樣:-)

+0

那麼,哪個代碼會產生引用的錯誤? – UncleBens 2010-10-20 14:52:40

回答

1

嘛,你嘗試編譯源包含文件:

(a)(b)(c)(d) 

我想您應該把這個背景下,其中該代碼是有道理的,或者只是運行預處理器(不編譯的結果)。

+0

我不認爲這是真的,請參閱我的編輯 – Philipp 2010-10-20 14:30:46

+0

@Philip:如果你把三行文件(boost樣本)和*編譯*它,預處理器將它變成'(a)(b)(c) (d)'然後編譯器出現並且毫無意義。該代碼本身不應該做任何事情。 – UncleBens 2010-10-20 14:55:22

+0

啊,我明白了。我的錯,謝謝你的澄清。 – Philipp 2010-10-20 18:12:00