2014-04-24 61 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;

或者您可以创建每个成员作为手动新建的指针。