1

データベースとレコードの 2 つのクラスがあります。

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;
}
4

2 に答える 2

0

コピー代入関数を呼び出すには、オブジェクトが事前にインスタンス化されている必要がある場合があります。

// So instead of doing this:
Database PM1, PM2;
PM2 = PM1;

// Try this:
Database *PM1 = new Database();
Database *PM2 = new Database();
*PM2 = *PM1;
于 2015-03-26T13:09:12.733 に答える