我有这样的结构:
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的doc上,而其他的则很好。
答案 0 :(得分: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
}
是最合适的数据类型。然后你可以做这样的事情:
{{1}}
答案 1 :(得分:0)
您只能删除使用new创建的内容。您可以按如下方式创建指针: m_doc * instance = new m_doc();
然后你可以稍后删除......
删除m_doc;
或者您可以将每个成员创建为手动新建的指针。