私はいくつかのユーザ定義のイテレータを持っており、すべての今して、私は回避しやすい奇妙なエラーが発生しますが、私はそれを取得していますなぜ私は理解していない:配列要素のアドレスが宣言と誤っているのはなぜですか?
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
が&を書く([]は、&よりも優先順位が高いことから、驚くことではない)(バイト[0])問題が解決しない:中間のステートメントは、次のエラーでコンパイルに失敗します。もちろん、明示的なcol_iteratorコンストラクタ呼び出しに "a"を代用することはできますが、なぜそれを行う必要がありますか?そして、問題がある場合、最後の行のcol_iteratorコンストラクタはなぜコンパイルされますか?
ありがとうございました。
ほとんどのVexing Parseはおそらく? –
問題を再現するa * short *の例を掲載してください。 –
それは最もVexing Parseかもしれませんが、わかりません。 3行目は同じように解析しないでしょうか? static_cast(&bytes [0])は問題を解決しますが、&bytes [0]の前後に括弧を追加するだけで問題は解決しません。申し訳ありませんが、例はまだ蒸留されていませんが、韻や理由なしに問題が発生しているようです(つまり、第3行と第2行とはどのように違うのですか?)。しかし、確かに解析エラーのように見えるので、実際にはrow_iteratorまたはcol_iteratorが何であるかに依存しないと思うでしょう。 –
user1806566