2010-10-20 74 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