考虑这段代码:
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;
}
为什么使用箭头运算符的循环中的第一行无法编译,而使用 operator* 的下一行工作正常?我习惯于将箭头运算符与 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’