c ++链表插入功能

时间:2010-11-03 01:03:48

标签: c++ linked-list

我得到一个与insert函数一起使用的create函数的编译错误。虽然当我在if子句中执行不同的调用时它会工作,但我想将它移动到单独的create函数中。关于我得到的编译错误的任何帮助表示赞赏

| 76 |错误:无法在赋值中转换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;
}

2 个答案:

答案 0 :(得分:1)

班级list_link是:

  1. sorted_list
  2. 的范围内声明
  3. 标记为private
  4. 为了让一个独立的函数创建一个这种类型的对象,你需要将类型设为public,你还需要在它前面添加sorted_list::,否则你需要在外面声明它sorted_list类的。{我应该补充一点,你使用list_link作为一个简单的数据对象,没有方法,字段是公共的,所以 - 从纯粹的文体角度来看 - 我建议将其声明为{{1}而不是一个类,这也消除了公共的需要。

答案 1 :(得分:0)

我不是C ++的权威,但我认为问题在于你采用的方式。

  1. list_link类是私有的。我建议将其公开,因为类只是可以创建对象实例的蓝图。您可以保密的是指向链接列表的实际指针list_link *first

  2. 由于list_link类嵌套在sorted_list类下,因此每次尝试访问sorted_list类时都必须通过list_link范围

  3. 尝试这个来解决问题:

    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);
        }
    }
    

    希望这会有所帮助。 欢呼声。