簡體   English   中英

C ++鏈表插入功能

[英]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是:

  1. sorted_list范圍內sorted_list
  2. 標記為private

為了使獨立函數創建此類型的對象,您需要將該類型設置為公共,還需要在sorted_list::前綴,或者需要在sorted_list類之外聲明它。 我應該補充一點,您將list_link用作簡單的數據對象,其中沒有方法,並且字段是公共的,因此-從純粹的樣式角度來看,我建議將其聲明為struct而不是類,消除了公共需求。

我不是C ++的權威,但我認為問題出在您處理問題的方式上。

  1. list_link類是私有的。 我建議將其公開,因為類只是可用於創建對象實例的藍圖。 您可以保密的是指向鏈表list_link *first的實際指針。

  2. 由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM