私の問題には、次の機能が含まれます。
/*Adds the transaction to the head of the linked list attached to the account.*/
void Bank::Worker::UpdateTransactionHistory(int account_number, string transaction, Bank *our_bank_ptr) {
transaction_node new_trans;
new_trans.transaction = transaction;
if (our_bank_ptr->accounts[account_number].head == nullptr) { //If this is the first transaction
our_bank_ptr->accounts[account_number].head = &new_trans;
} else { //If this isn't the first transaction, disconnect the account from its current transaction list, connect the new transaction to the account and then connect the old list to the new transaction.
transaction_node temp;
temp = *(our_bank_ptr->accounts[account_number].head);
our_bank_ptr->accounts[account_number].head = &new_trans;
new_trans.next = &temp;
}
if (our_bank_ptr->accounts[account_number].head) //here the correct string is printed
cout << our_bank_ptr->accounts[account_number].head->transaction;
}
これは、new_trans のトランザクション フィールドを更新することを意図しており、特定のアカウントの残りのトランザクション リストにリンクされます。更新トランザクション関数から戻る直前に、文字列が正しく追加されたことを確認するためにテストします。関数の最後の行はcout << our_bank_ptr->accounts[account_number].head->transaction;
、トランザクション文字列を正しく出力する です。
しかし、関数から戻ってすぐにまったく同じコード行を呼び出すと、コンパイラは、関数が更新したトランザクション フィールドがまだ初期化されていないことを通知します。これは、ポインターとして渡されたという事実にもかかわらずです。
一体何!? ポインターを介して関数に情報を渡すと、関数の過程でその情報に対して行ったことは永続的であると思いましたか? ここで何が欠けていますか?
お手伝いありがとうございます、
アダム