2016-09-17 4 views
0

STL을 사용하여 스택 객체의 링크 된 목록을 만들고 싶습니다. 이것은 내 코드와 같은 모습입니다 : 내가 얻을C++ - 중첩 컨테이너 (스택 컨테이너 목록 컨테이너)

int main() { 
    stack<int> s1; 
    list<stack<int>> ll; 
    s1.push(0) 
    ll.push_back(s1); 
    auto it = ll.begin(); 
    it++; 
    cout << *it->top() << endl; 
    return 0; 
} 

오류는 불법 간접 두 번째 마지막 줄에 클래스 '< <'불법입니다. 무슨 문제가있는 것 같습니까? 감사.

+1

네 번째 행에 세미콜론이 누락되어 있습니다. 8 행에서 it-> top()이어야하며 목록의 끝을 지나서 액세스하려고합니다. –

+0

죄송합니다. 실제로 많은 복잡한 버전의 기본 코드를 추가했습니다. 실제로 for 루프를 사용하여 여러 스택이있는 목록을 반복했습니다. 따라서 변경을 적절히 수행하는 것을 잊었습니다. – ExtremistEnigma

답변

0

당신은 다음과 같이 줄을 읽고 싶은 :

cout << (*it).top() << endl; 

당신은 값에 대한 포인터 대신 값을 역 참조했다. 내가 ->. 으로 바꿨습니다. 너트와 볼트는 본질적으로 값을 가리키는 포인터이며 '* it'은 값을 제공하므로 그 값의 멤버에 액세스하려면 .이 필요합니다. of ->

업데이트 : 또한 다른 사람들에 의해 지적 되었 듯이 누락되었습니다. 푸시 후 목록에 하나의 항목 만 추가 한 다음 목록 끝에서 한 값 뒤에 오는 반복자를 증가시킵니다. 이로 인해 런타임 문제가 발생합니다.

+1

및 "cout << it-> top()" 유효한 구문입니다. 구문이 정확할지라도 두 번째 마지막 줄은 세그먼트 범위 오류를 일으킬 것입니다. 범위 밖에있는 반복자에 액세스하고 있기 때문입니다. – bits

+0

네, 그렇습니다. 그것이 그 질문의 일부가 아니기 때문에 나는 그것을 내 대답에 넣지 않았다. 나는 나의 대답을 업데이트 할 것이다. – hvanbrug

+1

이 솔루션은 완벽한 의미입니다! it.top()하지만 (* it) .top() 할 일이 분명히 더 많은 의미가 있습니다. 다른 오류에 대해서 : 죄송 합니다만, 저는 방금 복잡한 버전의 기본 코드를 추가했습니다. 실제로 for 루프를 사용하여 여러 스택이있는 목록을 반복했습니다. 따라서 변경 작업을 적절하게 수행하는 것을 잊었습니다. – ExtremistEnigma