Tôi đang gặp vấn đề với con trỏ của mình trong C++ và sẽ rất tuyệt nếu ai đó có thể chia sẻ kiến thức chuyên môn của họ với tôi!Hành vi con trỏ không mong đợi trong C++
Kết quả tôi nhận được là:
1:
2:
END: C
1:C
2:E
END: E
Kết quả tôi đã mong đợi là:
1:
2:
END: C
1:C
2:C
END: E
Mã liên quan là thế này:
test.cpp tôi
tree.insert('C');
tree.insert('E');
Inse rt chức năng:
template <typename T> pair<typename btree<T>::iterator, bool> btree<T>::insert(const T& elem) {
cout << "1:" << this->rbegin_->value() << endl;
btree_node<T> node(elem);
cout << "2:" << this->rbegin_->value() << endl;
rbegin_ = &node;
iterator itr;
pair<typename btree<T>::iterator, bool> p(itr, false);
cout << "END: " << this->rbegin_->value() << endl;
return p;
}
Các nhà xây dựng cho btree_node (mà về cơ bản là trống):
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
Lớp btree có một biến tin:
btree_node<T>* rbegin_;
Đó là những gì tôi đang thay đổi . rbegin_ ban đầu được thiết lập để một nút trống trong constructor btree với:
btree_node<T> end(NULL);
rbegin_ = &end;
Nó có vẻ như constructor nút của tôi, mà không làm gì, được sửa đổi giá trị của rbegin-> giá trị() ....
Bất kỳ trợ giúp nào được đánh giá cao.
Hy vọng Bạn đang theo quy tắc Ba. –
Hi Als, xin lỗi vì sự thiếu hiểu biết của tôi, nhưng "quy tắc Ba" là gì? Trân trọng. Tôi chắc chắn sẽ cố gắng làm theo nó, nếu nó thực sự là một cái gì đó hợp lý để làm theo :) – Mick
kiểm tra này ra [what-is-the-rule-of-ba] (http://stackoverflow.com/questions/4172722/what- is-the-rule-of-three) –