좀 사용자 정의 반복자를 가지고 있고, 때때로 나는 주위에 일을 쉽게 이상한 오류가 발생,하지만 난 그것을 받고 있어요 왜 이해가 안 :배열 요소의 주소가 때때로 선언과 혼동되는 이유는 무엇입니까?
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를 사용합니다. 처음과 마지막 문장은 잘 동작합니다. 중간 문은 다음 오류와 함께 컴파일에 실패 :
([] &보다 높은 우선 순위를 가지고 있기 때문에, 당연한) & (바이트 [0]) 문제가 해결되지 쓰기test-2d-iterators.cc:780: error: declaration of 'bytes' as array of references
. 물론, 명시 적 col_iterator 생성자 호출을 "a"로 대체 할 수는 있지만 왜해야만합니까? 그리고 문제가있는 경우 마지막 줄의 col_iterator 생성자가 왜 컴파일됩니까?
감사합니다.
struct row_iterator { ... };
typedef unsigned* col_iterator;
unsigned bytes[5];
row_iterator base_iter_begin(col_iterator(&bytes[0]));
를 그리고 세 번째 줄은 다음과 같이 이해된다 : 모든
아마도 가장 Vexing Parse일까요? –
문제를 나타내는 a * short * 예제를 게시하십시오. –
그것은 가장 Vexing Parse 일 수 있지만 확실하지 않습니다. 세 번째 줄이 같은 방식으로 해석되지 않습니까? static_cast (& bytes [0])은 문제를 해결하지만, & [0] 주위에 괄호를 추가하는 것만으로는 문제가 해결되지 않습니다. 죄송합니다. 예제가 더 이상 소용이 없지만 문제는 아무런 이유도없이 (즉, 세 번째 줄이 두 번째 줄과 어떻게 다릅니 까?), 그래서 내 시도에 저항했습니다. 그것은 확실히 구문 분석 오류처럼 보이지만, 그래서 그것은 실제로 row_iterator 또는 col_iterator가 무엇인지에 의존하지 않는다고 생각할 것입니다. –
user1806566