0

配列をクラスに渡し、それを構築してから、トランザクション(配列を新しいデータで置き換える)またはトランザクションを追加する機能があります(したがって、配列が最初にサイズ10から外れている場合は、さらに10が追加されます。 20個の要素を含めると、配列内の量が常に20になるとは限りません)

このコードは、最初の2つのメソッドを使用したときに期待する正しい結果を生成しますが、トランザクションの追加メソッドは生成しません。期待どおりにさらに10個の要素を追加しません

誰かが私のコーディングでどのような問題があるか知っていますか?

私はこれの割り当て構造にかなり縛られているので、利用可能な構造で作業するのが理想的です。

Transaction* tArray;
int nTransactions;

Analyser::Analyser(Transaction* transactions, int numTransactions)
{
    //contructs the array and the amount of transations
    tArray = transactions;
    nTransactions = numTransactions;
}

void Analyser::setTransactions(Transaction* transactions, int numTransactions)
{
    //set tArray to new set of transactions
    tArray = transactions;
}

void Analyser::addTransactions(Transaction* transactions, int numTransactions)
{

    Transaction* newT;
    newT = new Transaction[numTransactions + nTransactions];    

    for(int i = 0; i<nTransactions; i++)
    {
        newT[i] = tArray[i];
    }
    for (int j = nTransactions; j<numTransactions + nTransactions; j++ )
    {
        newT[j] = transactions[j-nTransactions];    
    }
    tArray = newT;
 }
4

3 に答える 3

0

これを行う必要があります:

void Analyser::setTransactions(Transaction* transactions, int numTransactions)
{
//set tArray to new set of transactions
tArray = transactions;
ntransactions = numTransactions //HERE YOU NEED TO UPDATE THIS TOO
 }

コメントで述べられているように、ここでも:

 void Analyser::addTransactions(Transaction* transactions, int numTransactions)
 {

    nTransactions += numTransactions; 

    Transaction* newT;
    newT = new Transaction[nTransactions];    //Enough for all transactions

    for(int i = 0; i< nTransactions; i++)
    {
        newT[i] = tArray[i];
    }
    for (int j = 0; j< numTransactions; j++ )
    {
         newT[nTransactions - numTransactions + j] = transactions[j];    
    }
    tArray = newT;

 }
于 2013-03-13T15:27:38.287 に答える
0

行がありません

nTransactions = numTransactions;

setTransactionsで。コンストラクターは単にsetTransactionsメソッドを呼び出す必要があるため、そのコードは1回だけです。

于 2013-03-13T15:27:53.787 に答える
0

コードaddTransactionsは次のようになります。

void Analyser::addTransactions(Transaction* transactions, int numTransactions)
{

    Transaction* newT;
    newT = new Transaction[numTransactions + nTransactions];    

    for(int i = 0; i<nTransactions; i++)
    {
        newT[i] = tArray[i];
    }
    for (int j = nTransactions; j<numTransactions + nTransactions; j++ )
    {
        newT[j] = transactions[j-nTransactions];    
    }
    delete[] tArray;
    tArray = newT;
    nTransactions += numTransactions;
 }

delete[] tArrayメモリがリークしていないことを確認してください。この場合、コンストラクターとのように指定されたポインターが使用されている場合でも、Analyzerは常にtArrayを所有していると想定していますsetTransactions

nTransactions += numTransactions;のサイズtArrayが適切に更新されていることを確認してください。setTransactions前述のように、も編集する必要があります。

于 2013-03-13T15:39:49.163 に答える