链接的对象列表

时间:2016-11-12 13:11:19

标签: c++ pointers linked-list nodes

我目前有一个链表类,可以创建可以存储整数值的Node对象。我想修改我的List类,以便创建的节点能够引用指向不同类的对象的指针,而不是简单的整数值。我将如何声明指向正在另一个类中创建的对象的指针。

这个链表类可以创建包含int值的节点对象吗?

如何让我的链表类能够存储指向对象的指针?

#ifndef LINK_H 
#define LINK_H

class List{
  private:
    typedef struct Node{
      int m_data;
      Node *next;
    }* node_ptr;

    node_ptr cur;
    node_ptr temp; 
    node_ptr head;

  public:
    List();
    void add_node(int);
    void del_node(int);
    void print();
};
#endif 

这是食品类。我试图让我的链表存储指向从这个类创建的对象的指针。

#ifndef FOOD_H
#define FOOD_H
#include<string>
using namespace std;

class Food{

  private:

    string m_name;
    bool m_meat;
    int m_price;
    int m_calories;


  public:


    Food();
    Food(string , bool, int , int ); 
    bool is_meat(bool );
    void print(ostream &os);

};

#endif

1 个答案:

答案 0 :(得分:0)

简单的答案是做这个改变:

class List{
  private:
    typedef struct Node{
      Food* m_data;
      Node *next;
    }* node_ptr;

    node_ptr cur;
    node_ptr temp; 
    node_ptr head;

  public:
    List();
    void add_node(Food*);
    void del_node(Food*);
    void print();
};

这应该有效 - 您必须包含声明Food类的标题,或者执行Food类的前向声明。

可以调整此代码,以获得更好的性能,更灵活或更安全。这是使用更多的C ++功能。 但考虑这样做:

不要在头文件中使用using namespace std;或任何其他命名空间名称。这将在包含标题的每个文件中“包含”此命名空间。这很糟糕,因为它污染了全局命名空间。因此,如果定义函数int cout () {},则会与std :: cout发生冲突。这是一个微不足道的案例 - 但在更大的项目中,这非常重要。