2012-07-02 10 views
-1

나는이 테마에 관한 몇 가지 게시물을 읽고 객체 포인터의 stl 목록을 사용하여 모르겠다. 반복자를 통해 요소 함수에 액세스하려고 할 때 응용 프로그램이 오류 런타임을 얻는다. 널 포인터. 누군가 그걸 도와 줄까요 ?? 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.stl 객체 포인터의 반복자 목록

typedef std::list<Actor> listActors; 
    listActors listactors = pMain->Actors(); 
    listActors::iterator iter = listactors.begin(); 

std::string nameactor; 
nameactor = (*iter)->getName();//Here the app get a run time error of null pointer 
+1

전적으로 목록이 채워진 방식에 따라 다릅니다. 당신은 우리에게 그 코드를 보여주지 않았습니다. 하지만 내 생각 엔 첫 번째 요소는 null 포인터입니다 ... –

+1

Actor 객체에 대한 포인터가 아니라 목록에 Actor 객체를 저장합니다. 즉, 요소에 -> 연산자를 적용 할 수 없으므로 컴파일 오류가 발생합니다. 귀하의 코드는 다음과 같이 동작합니다 : 'Actor a; a-> getName(); ' 올바름 :'Actor a; a.getName();' –

+0

@DavidFrank : 코드가 표시된대로 정확합니다. 또 다른 가능성은 LarriPapi가 올바른 코드를 보여주지 못했고 목록이 실제로 포인터의 목록이라는 것입니다. 우리는 모두 짐작하고 있기 때문에 목록은 비어 있습니다 ('begin() == end()').이 경우'iter'의 역 참조가 유효하지 않습니다. –

답변

0

이 응답하지 않습니다까지 투표하지 마십시오 이 코드의 일부입니다. 그러나 댓글 섹션에는 너무 길다.
질문이 적절하게 업데이트되면 삭제하겠습니다.

:

typedef std::list<Actor> listActors; 

귀하의 목록에있는 배우 없는 배우에 포인터의 대상이 가득했다.

따라서이 경우 :

nameactor = (*iter)->getName(); 

컴파일, 다음 (* ITER)는 배우 객체와 사용할 수있는 유일한 방법입니다 - 클래스가 operator->() 과부하 경우가에서>와 포인터를 반환된다 NULL입니다.

Actor의 코드가 없으므로 잘못된 내용을 알 수 없거나 가능성이 높습니다. 질문을 만들 때 잘림 오류가 발생했습니다. 어떤 경우에도 우리는 도움을 줄 수 없습니다.

문제를 복제하기 위해 컴파일하고 실행할 수있는 코드를 작성해야합니다. 그것들은 질문에 정확한 코드를 붙여 넣습니다.

0

(*iter)->getName(); 잘못되었습니다. iter->getName(); 또는 (*iter).getName();을 써야합니다.