【问题标题】:Boost preprocessor: Sample not workingBoost 预处理器:样本不工作
【发布时间】:2010-10-20 12:12:33
【问题描述】:

我尝试从Boost.Preprocessor 库中编译一个示例:

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

在 Visual Studio 2008 上,我收到错误 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;
}

免责声明:此代码是 WTF 代码,我从未打算像这样使用 BOOST PP :-)

【问题讨论】:

  • 那么,哪个代码产生了引用的错误?

标签: c++ boost boost-preprocessor


【解决方案1】:

好吧,您正在尝试编译包含以下内容的源文件:

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

我想你应该把它放在这段代码有意义的上下文中,或者只运行预处理器(不编译结果)。

【讨论】:

  • 我不认为这是真的,请参阅我的编辑
  • @Philip: 如果你取三行文件(boost 的示例)并编译它,预处理器会将其转换为(a)(b)(c)(d),然后编译器会出现并生成没有任何意义。该代码不应该自己做任何事情。
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2014-10-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多