【发布时间】:2011-09-30 12:39:23
【问题描述】:
范围可用于对 Boost 多维数组 (multi_array) 进行切片。根据documentation,有几种定义范围的方法,但并非所有方法都能编译。我在 Ubuntu 11.04 上使用 GCC 4.5.2。
#include <boost/multi_array.hpp>
int main() {
typedef boost::multi_array_types::index_range range;
range a_range;
// indices i where 3 <= i
// Does compile
a_range = range().start(3);
// Does not compile
a_range = 3 <= range();
a_range = 2 < range();
return 0;
}
编译器输出为:
ma.cpp: In function ‘int main()’:
ma.cpp:9:26: error: no match for ‘operator<=’ in ‘3 <= boost::detail::multi_array::index_range<long int, long unsigned int>()’
ma.cpp:10:25: error: no match for ‘operator<’ in ‘2 < boost::detail::multi_array::index_range<long int, long unsigned int>()’
知道如何编译它,或者缺少什么吗?
【问题讨论】:
-
您是否尝试过显式注入整个命名空间(即
using boost::deail::multi_array)?这是似乎定义了运算符的地方,但是可能由于您的编译器 ADL 失败(例如,ideone 编译了上述内容)。 -
试过
using namespace boost::detail::multi_array,我仍然得到错误... -
奇怪,刚刚ssh'ed到另一台机器,它在那里编译。目前正在检查那里有什么不同。
-
顺便说一句。 1.42。未通过 4.5.2 认证 - 因此可能存在一些问题,只有 1.46 通过 4.5.2 认证
标签: c++ boost multidimensional-array boost-multi-array