2014-04-24 63 views
0

刪除在一個結構的元件我有這樣一個結構:通過使用刪除操作符

struct m_doc{ 
char id[30]; 
int ISBN[30]; 
char title[50]; 
char author[50]; 
int year[30]; 

};

正如我試圖通過使用delete運算符刪除裏面的一個元素,發生這種情況:

if (doc.id[i] == doc.id[j]) 
    delete[] doc.author[j], doc.id[j], doc.ISBN[j], doc.title[j], doc.year[j];//expression must have pointer type 

的錯誤是隻doc.author的文檔,而其他都很好。

+3

這些東西都不應該刪除。 – chris

+0

刪除一個沒有用new初始化的結構成員後,你會發生什麼? –

+2

只有'delete'你從'new'得到了什麼。同樣,只有'delete []'你從'new []'得到了什麼。 –

回答

1

聲明的數組在超出範圍時自動刪除。 你只需要刪除聲明如下數組:

int* array = new int[30]; 
//Do work 
delete[] array; 

你應該更喜歡但是在std::vector後者陣列風格和std::array,而不是你在你的代碼中使用的陣列。它更不容易出錯。

在你的情況下(並且幾乎總是),std::vector是最合適的數據類型。然後你可以做這樣的東西:

if (doc.id[i] == doc.id[j]) { 
    doc.author.erase(doc.author.begin() + j); 
    //and so on 
} 
0

你可能只能刪除你用新創建的東西。您可以創建一個指針,如下所示: m_doc * instance = new m_doc();

然後你可以稍後刪除它...

刪除m_doc;

或者您可以創建每個成員作爲手動新建的指針。