문제

나는 매우 기본적인 게임을하고 있으며 내 게임과 관련된 객체의 STD :: 목록 컬렉션이 있습니다. 나는 그것을 다음과 같이 선언했다 :

std::list<Target> targets;

내가 그것을 반복 할 때, 사용

for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
        Target t = *iter;
                t.move();
}

내 객체는 GUI에서 업데이트되지 않습니다. 그러나 반복 루프를 a로 교체합니다 targets.front().move(), 내 객체가 올바르게 움직입니다. 나는 이것이 포인터를 사용하여 컬렉션을 반복하지 않기 때문이라고 생각합니다. 누구든지 그 일이 어떻게 이루어 졌는지 설명 할 수 있습니까? 감사.

도움이 되었습니까?

해결책

당신은 객체를 복사하고 있습니다. 이런 식으로하십시오.

*iter.move()

사용하는 경우 Target t = *iter; 당신은 본질적으로 의도 한 객체를 움직이지 않고 객체의 사본을 만들고 움직입니다.

XTOFL이 말했듯이 (thx) 참조도 얻을 수 있습니다.

Target &t = *iter;
t.move();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top