私はいくつかのユーザー定義のイテレータを持っていますが、時々、簡単に回避できる奇妙なエラーが発生しますが、なぜそれが発生するのか理解できません:
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
);
typedefs row_iterator と col_iterator が埋め込まれた array_iterator というクラスがあります。row_iterator コンストラクターは、最初の引数として col_iterator を取ります。最初と最後のステートメントは問題なく機能します。中間のステートメントは、次のエラーでコンパイルに失敗します。
test-2d-iterators.cc:780: error: declaration of 'bytes' as array of references
&( bytes[0] ) と書いても問題は解決しません ([] は & よりも優先順位が高いため、当然のことです)。もちろん、明示的な col_iterator コンストラクター呼び出しを "a" に置き換えることはできますが、なぜそうしなければならないのでしょうか? また、問題があるとすれば、最後の行の col_iterator コンストラクターがコンパイルされるのはなぜですか?
ありがとう。