Customer
次のようなオブジェクト(ポインターではない)を返す関数があります。
Customer CustomerList::retrieve(const int index) const{
if (index<1 || index>size)
return false;
else{
Node *cur = find(index);
return (cur->data);
}
}
この関数は、(リンクされたリストである)Customer
からオブジェクトを取得しますCustomerList
。
次の関数を使用してリスト内のを操作しようとしていCustomer
ます (この関数はオブジェクトに を追加します) Account
。Customer
list.retrieve(i).addAccount(acc);
ただし、この関数呼び出しの後、Customer
オブジェクト inCustomerList
は変更されません。その理由はCustomer
、オブジェクト自体ではなく、オブジェクトのコピーを返すためだと思います。
したがって、Customer のアドレスを返して正しく操作するために、関数に次の変更を加えます。
Customer* CustomerList::retrieve(const int index) const{
if (index<1 || index>size)
return false;
else{
Node *cur = find(index);
return &(cur->data);
}
}
そして、次のように操作関数を呼び出します。
list.retrieve(i)->addAccount(acc);
しかし、「アクセス違反の読み取り場所0x00000044」が表示されます。エラー。私が学びたいのは:
Customer
そもそもオブジェクトを操作しないのはなぜですか? 私の仮定は正しいですか?- 関数と関数呼び出しを変更した後、上記のエラーが表示されるのはなぜですか?