【发布时间】:2014-10-20 09:22:36
【问题描述】:
考虑这段代码:
struct CData
{
int bar() { return 1; }
};
int main()
{
typedef boost::numeric::ublas::vector<CData> vec_data_t;
vec_data_t foo;
for (vec_data_t::iterator it = foo.begin();
it != foo.end();
++it)
{
std::cout << it->bar() << std::endl; // COMPILE ERROR!
std::cout << (*it).bar() << std::endl; // ok
}
return 0;
}
为什么循环中使用箭头运算符的第一行编译失败,而使用运算符*的下一行可以正常编译? 我习惯于将箭头运算符与 std 容器迭代器一起使用,并想知道为什么它会因 boost::numeric::ublas 迭代器而失败。
我正在使用 boost 1.54 和 gcc 4.9.1,确切的错误消息是:
error: base operand of ‘->’ has non-pointer type ‘boost::numeric::ublas::vector<CData>::iterator’
【问题讨论】:
标签: c++ boost boost-ublas