我有一些用户定义的迭代器,时不时会遇到一个很容易解决的奇怪错误,但我不明白为什么会得到它:
uint8_t bytes[pitch*height];
array_iterator::col_iterator a( &bytes[0] );
array_iterator::row_iterator base_iter_begin(
array_iterator::col_iterator( &bytes[0] ), width, pitch );
array_iterator::row_iterator base_iter_end(
array_iterator::col_iterator( &bytes[pitch*height] ), width, pitch
);
我有一个名为 array_iterator 的类,其中嵌入了 typedefs row_iterator 和 col_iterator。row_iterator 构造函数将 col_iterator 作为其第一个参数。第一个和最后一个语句工作得很好。中间语句编译失败,出现以下错误:
test-2d-iterators.cc:780: error: declaration of 'bytes' as array of references
写 &( bytes[0] ) 并不能解决问题(不足为奇,因为 [] 的优先级高于 &)。当然,我可以将“a”替换为显式 col_iterator 构造函数调用,但为什么必须这样做呢?而且如果有问题,为什么最后一行的col_iterator构造函数编译?
谢谢。