我有一些用戶定義的迭代器,和每一個現在,然後我得到一個奇怪的錯誤,很容易解決,但我不明白爲什麼我得到它:爲什麼數組元素的地址有時會被誤認爲聲明?
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
寫作&(字節[0])不解決問題(這並不奇怪,因爲[]的優先級高於&)。當然,我可以用「a」代替顯式的col_iterator構造函數調用,但爲什麼我必須?如果出現問題,爲什麼最後一行中的col_iterator構造函數會被編譯?
謝謝。
最煩人的解析也許? – 2013-04-26 01:52:12
發佈可重現問題的* short *示例。 – 2013-04-26 02:20:57
它可能是最煩人的解析,但我不確定。第三行不會以同樣的方式解析嗎? static_cast(&bytes [0])解決了這個問題,但只是在&bytes [0]周圍添加parens不會。對不起,這個例子並沒有更多提煉出來,但問題似乎沒有任何韻律或理由(即第三行與第二行不同),所以它抵制了我的嘗試。不過,它看起來像一個分析錯誤,所以我認爲它不依賴於row_iterator或col_iterator的實際內容。 –
user1806566
2013-04-26 03:10:41