我有两个类,数据库和记录。
class Database {
private:
Record* head;
public:
Database(Record*);
Database();
Database(const Database&);
Database& operator= (const Database &data);
};
class Record {
public:
Record(std::string, std::string, int, int, std::string);
Record(const Record&);
Record();
Record* next;
};
现在我这样做了
Database PM1, PM2;
//operations on PM1
PM2 = PM1;
所有发生的事情是PM1中的值被分配给PM2。永远不会调用赋值重载。我不知道为什么会这样。我也尝试过调试,但是函数从未输入过。我做错了什么?
编辑:这是重载功能,它可能不对,但我还没能测试它,因为我甚至无法让它运行。Database& Database::operator= (const Database &data) {
if(this == &data)
return *this;
if(data.head == NULL) {
this->head = NULL;
return *this;
}
Record *curr1, *curr2;
curr1 = new Record(*(data.head));
this->head = curr1;
for(curr2 = data.head->next; curr1 != NULL && curr2 != NULL; curr1 = curr1->next) {
curr1->next = new Record(*curr2);
curr2 = curr2->next;
}
return *this;
}
答案 0 :(得分:0)
我认为因为你在数据库类中有指针,我猜你没有处理,你认为你重载的操作员不能正常工作。 你做浅拷贝。所以你需要处理它!
答案 1 :(得分:0)
可能需要先实例化对象,才能调用复制赋值函数。
// So instead of doing this:
Database PM1, PM2;
PM2 = PM1;
// Try this:
Database *PM1 = new Database();
Database *PM2 = new Database();
*PM2 = *PM1;