我目前有一个链表类,可以创建可以存储整数值的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
答案 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发生冲突。这是一个微不足道的案例 - 但在更大的项目中,这非常重要。