친구 클래스를 사용하고 있으며 내 목록 클래스에서 DeleteItem을 호출 할 때 rec의 소멸자를 사용하려고합니다. 그러나 삭제하려는 레코드를 가리키는 포인터가 있으므로 소멸자를 호출하는 방법을 모르므로 원하는대로 처리 할 수 있습니다. 클래스 :친구 클래스에서 소멸자 호출
class rec
{
friend class list;
private:
char * id;
char firstname[15];
char lastname[15];
int ar[10];
rec* prev;
rec* next;
public:
void SetData (char * id_in, char * fn, char * ln, int * ans_in);
rec(char *i, char *fn, char *ln, int *a);
rec();
void operator= (const rec& r);
rec (const rec& r);
void Print();
~rec();
};
class list
{
private:
rec* first;
rec* last;
public:
int AddItem(rec r);
int DeleteItem (char* delid);
void PrintList(int order);
int ReadData(char *inanswer, char *inkey);
int WriteData(char *answer, char *key);
list();
void operator= (list l);
private:
int CheckDuplicate(rec r);
void DeleteData();
int Count(char *filename);
};
~ REC()
rec :: ~rec()
{
if (id != NULL)
{
delete [] id;
}
}
의 deleteItem (Snipet) 내가 수동으로 delete[] current ->id;
에 넣어하지만이 작업을 수행하면 내가하려고 할 때
int list :: DeleteItem(char *delid)
{
int id_counter;
rec *current = first;
while (current || current == NULL)
{
if (current == NULL)
{
return 0;
}
else
{
id_counter = strcmp(current -> id, delid);
if (id_counter != 0)
{
current = current -> next;
}
else
{
if (current == first && current != last)
{
~rec(); //Here
first = current -> next;
delete current;
first -> prev = NULL;
return 1;
}
삭제 항목이 잘 컴파일 그대로 컴파일하다
list.cpp:292: error: no match for ‘operator~’ in ‘~rec()’
/usr/lib/gcc/x86_64-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/ios_base.h:105: note: candidates are: std::_Ios_Fmtflags std::operator~(std::_Ios_Fmtflags)
/usr/lib/gcc/x86_64-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/ios_base.h:145: note: std::_Ios_Openmode std::operator~(std::_Ios_Openmode)
/usr/lib/gcc/x86_64-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/ios_base.h:183: note: std::_Ios_Iostate std::operator~(std::_Ios_Iostate)
내 소멸자가 고쳐야하는지, 아니면 DeleteItem에서해야 할 일인가요?
여기에서 읽을 수 있도록 코드의 형식을 올바르게 지정하십시오. –
나쁜 습관이 있기 때문에 "친구"없이 문제를 해결할 것을 고려하십시오. – 21koizyd
소멸자를 명시 적으로 호출해서는 안됩니다. 물론이 수업에는 적합하지 않습니다. 원시 포인터와 배열도 피해야합니다. std :: string, std :: vector 및 std :: shared_ptr/std :: unique_ptr을 대신 사용하십시오. –