我有一個名爲'list'的類的頭文件和一個名爲'node'的類,該類的私有部分內。總之,這個類和結構將構成一個雙線性鏈接的釀酒廠對象列表(釀酒廠是它自己的類)。我想知道是,如果這將是最好的實現和列表構造函數和析構函數 (像這樣的例子,其中全中,編譯器錯誤)中去實現節點結構的變量:我應該在其包含的類的構造函數中初始化一個結構變量嗎?
list::list()
{
struct node
{
item = winery::winery()
nextByName = nullptr;
nextByRating = nullptr;
};
headByName = nullptr;
headByRating = nullptr;
}
list::~list()
{
struct node
{
delete item;
delete nextByName;
delete nextByRating;
};
delete headByName;
delete headByRating;
}
我的編譯器當我刪除列表構造函數和解構器中的那些節點時拋出錯誤;所以上面的例子在某些方面顯然是不正確的。但是在我看來,如果沒有這種方法,這個解決方案就可以工作,只是沒有這個確切的代碼。
我也好奇,如果這將是更好地執行和去實現單獨的結構 (像這樣):
list::node::node()
{
item = winery::winery()
nextByName = nullptr;
nextByRating = nullptr;
}
list::node::~node()
{
delete item;
delete nextByName;
delete nextByRating;
}
當我單獨(上面)刪除那些元素,我只構造函數拋出該錯誤爲delete item;
。你知道這是爲什麼嗎?你能解釋爲什麼我不需要刪除釀酒廠的物品嗎?我應該在那裏打電話給酒廠解構師嗎?
我應該做一些完全不同的事情嗎?我在網上看過,在我的教科書裏,但是對此沒有明確的答案。我非常感謝你們的幫助,如果你能解釋爲什麼你的解決方案是最好的(如果它是最好的),我會非常感激。畢竟,我幾個月前纔開始學習C++。
順便說一句,這是我的list.h文件看起來像:
#include "winery.h"
class list
{
public:
list();
~list();
void addWinery();
void removeWinery();
void displayByRating() const;
void displayByName() const;
void searchByName() const;
private:
struct node
{
winery item;
node * nextByName;
node * nextByRating;
};
node * headByName;
node * headByRating;
};
將'struct node {'放在一個函數中聲明一個名爲'node'的類,該函數是本地函數。看起來好像你認爲它引用了一個不同的結構節點,或者其他東西。 –
紅色警戒,零/三/五違規規則;請考慮複製/移動/分配請 –