좋은 하루 경이, 내게 그렇게 좋지 않기 때문에 좋은 하루 경,문제 C++ STD Iterator 비교 연산자
입니다.
class C
{
public:
...
std::vector<B*> elements;
...
}
B는 포인터의 벡터에 있습니다
내가 자식을 가지고 있지만 다른 클래스의 인스턴스에 대한 포인터로 만들어진 벡터를 가지고하지 않는 클래스 C를 가지고,의는 B를 부르 자 다른 클래스의 인스턴스는, 이제 그것을 부르 자 :
C는 다음과 같이 작동 요소와 요소 2의 요소를 반복하고, 방법이class B
{
public:
...
std::vector<A*> elements2;
...
}
:
std::vector<B*>::iterator it1;
std::vector<A*>::iterator it2;
for (it1=this->elements.begin(); it1!=this->elements.end(); ++it1)
{
for (it2 = it1->elements2.begin(); it12=it1->elements2.end(); ++it2)
{
it2->do_something(); //method of class A
}
}
을
하지만 컴파일러 (g ++)는 operator! = in (클래스 계층 구조)과 일치하는 것을 계속 유지합니다.
내가 뭘 잘못했는지 아는 사람 있습니까? '<'과 같은 다른 연산자는 작동하지 않습니다.
저는 초보자가 아니지만 C++ (전 파이썬 프로그래머)에서 반복자를 사용하기 시작한 것이므로 코드에 무엇이 잘못되었는지를 알 수 없습니다.
사전에 도움을 주셔서 감사합니다, 나는 이걸로 내 머리를 잃고 있어요!
편집 : 참조를 위해 전체 오류를 추가하고 있습니다. 나는 그 질문에 맞도록 편집했는데, 나는 아무것도 망쳐 놓지 않았 으면 좋겠다 :
'it1! = ((C *) this) -> C :: elements .std : 벡터 <는 _Tp, _Tp = B *를 _Alloc = 표준 : : 할당 '와 _Alloc> :: 끝
, 미안 해요. it1 (inner loop)은 당연히 it2라고 생각했습니다. 아직 컴파일되지 않습니다. 편집 : 나는 내부 루프 전에 컴파일러 오류를 실제로 외부 및 내부 루프 모두 얻을. – Percival
@Percival : 대답 편집 – icecrime
벡터의 끝을위한 반복자를 생성하면 분명히 연산자 문제가 종료되지만 분명히 다른 문제가 나타납니다 (아마도 내 잘못). 나는 그 원인이 무엇인지 궁금해. 다른 오류를 수정하려고합니다. 그 때까지 이것이 가장 유효한 대답입니다. 감사! 편집 : 완벽하게 작동합니다. 우수 답변! – Percival