2016-11-12 68 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發生衝突。這是一個微不足道的案例 - 但在更大的項目中,這非常重要。