"不能在 boost::numeric::ublas::vector<...>::iterator 上工作?-6ren"> "不能在 boost::numeric::ublas::vector<...>::iterator 上工作?-考虑这段代码: struct CData { int bar() { return 1; } }; int main() { typedef boost::numeric::ublas-6ren">
gpt4 book ai didi

c++ - 为什么箭头运算符 "->"不能在 boost::numeric::ublas::vector<...>::iterator 上工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:10 25 4
gpt4 key购买 nike

考虑这段代码:

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’

最佳答案

我会说这是 Boost 中的一个错误。根据文档,boost::numeric::ublas::vector型号 a Vector Expression ,它提供了一个 Indexed Bidirectional iterator ,其中(除其他事项外)列出了以下内容作为有效表达式及其语义:

Member access | it->m | Type requirements T is a type for which t.m is defined.


Member access | it->m | Precondition it is dereferenceable. | Semantics Equivalent to (*it).m

查看代码表明 indexed_iterator 类模板没有定义 operator->。根据文档,它显然应该。

您可能想要查找错误报告,如果没有,请提交一份。

关于c++ - 为什么箭头运算符 "->"不能在 boost::numeric::ublas::vector<...>::iterator 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com