5

私はいくつかのユーザー定義のイテレータを持っていますが、時々、簡単に回避できる奇妙なエラーが発生しますが、なぜそれが発生するのか理解できません:

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 コンストラクターがコンパイルされるのはなぜですか?

ありがとう。

4

1 に答える 1