2014-01-10 2 views
1

배열과 벡터의 교집합을 가져 오려고합니다. 나는 cplusplus.com이 예제를 제공하는 방법이기 때문에 두 벡터로 만들기로 결정했습니다. 여기디버그 어설 션 오류 - 배열 반복자가 호환되지 않습니다.

enter image description here

내 코드입니다 :

enter image description here

getNumbers() 함수가 배열을 반환은

은 내가 오류 메시지입니다.

편집 여기

getNumbers() 기능입니다 - 그냥 같은 반환 형식의 속성을 반환

enter image description here

+3

'getNumbers'를 볼 수 있습니까? 숫자 사본을 반환하면 오류를 설명합니다. – templatetypedef

+0

님이'getNumbers'를 추가했습니다. –

답변

3

이 주장은 일반적으로 반복자는 시작과로 제공한다는 것을 의미 범위의 끝 다른 컬렉션을 참조하십시오.

getNumbers() 함수는 배열을 반환합니다.

getNumbers() 참조에 의해 배열을 반환하고, 또한 동일한 배열에 대한 참조를 반환하지 않는 한,이 초기화는 무효이다

작동하는 상기 위해서는
std::vector<unsigned int> ticketNumbers(getNumbers().begin(), getNumbers().end()); 

, getNumbers() 반복 참조를 반환해야 같은 배열에. getNumbers은 값으로 배열을 반환하기 때문에 복사본을 반환합니다.

는이처럼 const 참조를 반환하기 위해 getNumbers() 기능을 변경 수, 또는이

std::array<unsigned int, TICKET_BALL_COUNT> tempNumbers= getNumbers(); 
std::vector<unsigned int> ticketNumbers(tempNumbers.begin(), tempNumbers.end()); 

처럼, 임시 변수 tempNumbers에 결과를 저장,이 라인, 첫 번째 호출 getNumbers()를 해결하려면 :

const std::array<unsigned int, TICKET_BALL_COUNT>& Ticket::getNumbers() const { 
    return _numbers; 
} 
+0

고마워요! 이것은 완벽하게 작동합니다 –

+0

@AdamCarter 환영합니다! 두 번째 대안을 살펴보면 작동 할 수도 있고 복사하는 양도 줄일 수 있습니다. – dasblinkenlight

+0

감사합니다. 감사합니다. 나는 C++을 처음 사용하고 const 키워드를 함수 이름의 양쪽에 두는 것이 이상한가? 이 표준 관행인가? –