포인터를 목록에 삽입하려고 시도하지만 목록을 인쇄하려고하거나 목록의 내용을 확인하려고 할 때마다 비어 있다고 말합니다. 이것은 내 삽입이 잘못된 것을 의미합니다,하지만 난 내 다음과 같은 클래스가 왜, 이해가 안 :요소를 삽입 한 후에도 list가 비어있는 상태입니다. C++
namespace {
template <typename T>
pair < node<T>*, bool> addElement (const T& elem, btree<T>* bt) {
class list < node<T>* >::iterator itr = bt->level().begin();
if (bt->level().empty()) {
node <T>*n = new node<T>(elem, bt->max());
cout << n->getItem() << endl;
bt->addElem(itr, n);
return make_pair(n, true);
}
for (; itr != bt->level().end(); ++itr) {
if (elem < (*itr)->getItem()) {
node <T>* n = new node<T> (elem, bt->max());
(*itr)->previous()->addNext(n);
n->addPrev((*itr)->previous());
n->addNext(*itr);
(*itr)->addPrev(n);
bt->addElem(itr, n);
return make_pair(n, true);
} else if (elem == (*itr)->getItem()) return make_pair(*itr, false);
}
// other stuff + return statement
}
addElem는 다음을 수행합니다
size_t maxNodeElems;
list < node<T>*> neighbours;
:
btree
클래스로 구성
void addElem (std::_List_iterator<node<T>*>& itr, node <T>* n) {
neighbours.insert(itr, n);
if (neighbours.empty()) cout << "wa?";
}
addPrev()
및 previous()
과 같은 다른 것들은 게터 및 설정자입니다. 어쨌든, 나는 그것에 대해 btree
을 생성하는 테스트 파일을 실행하고이 addElement
함수를 직접 호출하는 insert
함수를 호출합니다. 그러나 btree 내부에서 목록을 인쇄하려고 할 때마다 빈 상태와 seg 오류가 표시됩니다. 왜 저장하지 않는지 나는 이해하지 못한다.
도움이 될 것입니다.
참고 : "Wa?"
// find the place to insert elem
for (; itr != bt->level().end(); ++itr) {
if (elem < (*itr)->getItem()) {
// insert...
}
}
그러나 목록 (초기 상태) 비어있는 경우, ITR은 아마도 동일한 BT-> 레벨 (될 것입니다 : 당신이 정렬 된 목록을 유지하려고하는 것 같다
표시 코드가 잘못되었을 수 있습니다. 트리를 인쇄하는 코드도 표시하십시오. –
@ graham.reeds 필자는 addElem 안에 'if neighbors is empty print something'을 말한 뒤에'if '문을 써서 항상 무언가를 출력했습니다. – SNpn
디버거 사용법을 배우십시오 - 왜 작동하지 않는지 더 많이 알려줍니다. 관심이 없다면 어떤 IDE를 사용하고 있습니까? – Skizz