我正在讀大學的一個項目,並在C++中閱讀課程。我們目前正在使用鏈接列表,並已開始使用模板。不知何故,我不能讓我的列表鏈接,換句話說,我的下一個功能將無法正常工作。如果指向不正確,在編譯時沒有抱怨,沒有任何運行程序並將其添加到列表中的問題,我不會收到「分段錯誤(核心轉儲)」問題,但問題在於,當我添加它時找到下一個元素,它只打印出我的第一個元素。模板中的鏈接列表
這是我的元素模板:
template <class T>
class element {
private:
element <T> * next;
T name;
public:
element <T> * get_nxt() {
return next;
}
void set_name (string nam) {
name = nam;
}
string get_name() {
return name;
}
void set_nxt (element <T> * n) {
next = n;
}
};
所以,當我wan't鏈接兩個指針我用的是:
set_nxt(元素* N);
所以它看起來像代碼(我想設置爲PTR2旁邊PTR1):
ptr1-> set_nxt(PTR2);
因爲我後來想檢查我的列表包含多少個元素,它只能說一個。
這裏是計數功能我使用過他們的所有計算:
template < class T >
int lista<T>::count (lista<T> & L) {
element <T> *curr = LIST;
int nr = 0;
while (curr) {
curr = curr->get_nxt();
++nr;
}
return nr;
}
某處這裏的問題在於,因爲這個函數返回1,即使我已經添加了2個或更多。
名單已經以這種方式宣告:
template < class T >
class lista {
private:
element <T> * LIST;
public:
lista() {
LIST = NULL;
}
void add(lista<T> & , string, int);
int count(lista<T> &);
void print (lista <T> &);
};
我有列表,而不是流行的頭。我一直在盯着看似幾個小時的代碼,我找不到任何錯誤。我們之前一直在做沒有模板的鏈接列表,我假設鏈接過程對於鏈接列表模板是一樣的。
添加元素:
void lista<T>::add (lista<T> & L, string name, int cond) {
element <T> *curr = LIST, *fill;
fill = new element <T>;
curr = new element <T>;
if (cond == 0) {
int nr;
nr = L.count(L);
if (nr == 0) {
curr->set_name (name);
LIST = curr;
}
else if (nr > 0) {
int i;
for (i = 1 ; i < nr ; ++i)
curr = curr->get_nxt();
fill->set_name(name);
curr->set_nxt (fill);
fill->set_nxt(NULL);
}
忽略此所述,如果(COND == 0)它是非必需的。
你肯定* *是'LIST'指向列表的頭部?你能告訴你如何創建一個簡單的列表(一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve))? –
我編輯和添加功能是在主文章的結尾。 – CNAP
@CNAP'我一直盯着看似幾個小時的代碼,我找不到任何錯誤'瞭解如何使用調試器。你不能編寫像這樣的非平凡程序,也不希望用你的調試器進行調試。盯着代碼只能走得這麼遠...... – PaulMcKenzie