2016-11-12 77 views
-2

我目前有一个链接列表类,可以创建可以存储整数值的节点对象。我想修改我的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 
+0

答案很简单:改变它就可以了。它不是“int”,而是一个指针。这有什么难的? –

回答

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

这应该工作 - 你必须包含头文件,其中食品类被声明,或做食品的向前声明类。

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

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