[英]c++ linked list insert function
與插入功能一起使用的創建功能出現編譯錯誤。 盡管我在if子句中執行不同的調用時它可以工作,但是我想將其移到單獨的create函數中。 關於我得到的編譯錯誤的任何幫助,我們將不勝感激
| 76 |錯誤:無法在分配中將list_link *'轉換list_link*' to
sorted_list :: list_link *'|
頭文件
class sorted_list
{
public:
sorted_list(); // Constructor declaration
~sorted_list(); // Destructor declaration
void insert(int key, double value);
void print();
private:
class list_link
{
// Declarations
public:
my_key_type key;
my_value_type value;
list_link *next;
};
list_link* first;
};
功能
void sorted_list::insert(int key, double value)
{
list_link *curr, *prev;
curr = first;
while(curr)
{
prev = curr;
curr = curr->next;
}
if(first == 0 || prev == 0) //if empty or add first
{
cout << "empty list" << endl;
list_link *new_link = new list_link;
new_link->key = key;
new_link->value = value;
new_link->next = 0;
first = new_link;
}
else
{
cout << "add" << endl;
prev->next = create(key, value, 0);
}
}
創建功能
list_link* create(my_key_type key, my_value_type value, list_link* next)
{
// creates the node;
list_link *new_link = new list_link;
// add values to the node;
new_link->key = key;
new_link->value = value;
new_link->next = next;
return new_link;
}
類list_link
是:
sorted_list
范圍內sorted_list
private
為了使獨立函數創建此類型的對象,您需要將該類型設置為公共,還需要在sorted_list::
前綴,或者需要在sorted_list
類之外聲明它。 我應該補充一點,您將list_link
用作簡單的數據對象,其中沒有方法,並且字段是公共的,因此-從純粹的樣式角度來看,我建議將其聲明為struct
而不是類,消除了公共需求。
我不是C ++的權威,但我認為問題出在您處理問題的方式上。
list_link
類是私有的。 我建議將其公開,因為類只是可用於創建對象實例的藍圖。 您可以保密的是指向鏈表list_link *first
的實際指針。
由於list_link
類是嵌套在sorted_list
類,你必須通過去sorted_list
范圍內的每個嘗試訪問的時間list_link
類。
嘗試解決此問題:
class sorted_list
{
public:
sorted_list(); // Constructor declaration
~sorted_list(); // Destructor declaration
void insert(int key, double value);
void print();
class list_link
{
// Declarations
public:
my_key_type key;
my_value_type value;
list_link *next;
};
private:
list_link* first;
};
sorted_list::list_link* create(my_key_type key, my_value_type value, sorted_list::list_link* next)
{
// creates the node;
sorted_list::list_link *new_link = new sorted_list::list_link;
// add values to the node;
new_link->key = key;
new_link->value = value;
new_link->next = next;
return new_link;
}
void sorted_list::insert(int key, double value)
{
list_link *curr, *prev;
curr = first;
while(curr)
{
prev = curr;
curr = curr->next;
}
if(first == 0 || prev == 0) //if empty or add first
{
cout << "empty list" << endl;
list_link *new_link = new list_link;
new_link->key = key;
new_link->value = value;
new_link->next = 0;
first = new_link;
}
else
{
cout << "add" << endl;
prev->next = create(key, value, 0);
}
}
希望這可以幫助。 干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.