1

キューの内容を配列として出力しようとしています。私はコードを動作させ、コンパイルしています。問題は、関数を複数回呼び出すと、印刷関数が呼び出されず、配列が再度印刷されないことです。配列を複数回印刷する必要がありますが、印刷されません。

Print 関数のコードは次のとおりです。

template <class Type>
 void queueType<Type>::debugArray() 
 {
   for(queueFront; queueFront<count; queueFront++){
    cout << "[" << queueFront<< "] ," << list[queueFront] << " ";
   }

 } //end debugQueue

main.cpp コードは次のとおりです。

#include <iostream>
#include "queueAsArray.h"

using namespace std;

int main()
{
    queueType<int> q1;
    queueType<int> q2;
    queueType<int> q3;
    int x = 5;

    for(int i= 0; i<10; i++) {
        q1.addQueue(i);
    }

    cout << "q1 after being filled up with 10 items" << endl;

    q1.printQueueInfo();

    cout << "Queue contents from front to rear\n\n" << endl;

    q1.debugArray();
    q1.deleteQueue();
    q1.deleteQueue();
    q1.deleteQueue();

    for(int i= 0; i<=20; i){
        i+=5;
        q1.addQueue(i);
    }

    q1.debugArray();
    return 0;
}

関数呼び出しが再度印刷されない理由はありますか? クラス全体と実装ファイルが必要な場合は、提供できます。奇妙なことに、 class の 2 つ目のインスタンスを作成してからq2の配列を作成するq2と、debugQueue関数はそのキューを出力します。次に、オーバーロードされた代入演算子と doq2=q1を呼び出し、次にdebugQueueAgain を呼び出すと、キューの内容が出力されます。そのため、最初のキューではなく、2 番目のキューを 2 回印刷する理由がわかりません。何かご意見は?

4

2 に答える 2

1

queueFrontを呼び出すと、永続的に変更されているだけだと思いますdebugArray()。おそらく一時的なものを作成する必要があります...それが何であれqueueFrontconstキューの先頭が変更されるべきではないためです(それが参照している場合)。

于 2012-10-19T20:12:04.130 に答える
1

問題はqueueType、印刷の一部としてインスタンスを変更していることにあるようです。

template <class Type>
void queueType<Type>::debugArray() 
{
  for(queueFront; queueFront<count; queueFront++){
    cout<<"[" << queueFront<<"] ,"<< list[queueFront]<<" ";}
} 

ここでは、メンバーを取得してqueueFront、キューの最後に到達するまで順方向に変更しています。queueFrontこれは、同じ場所を指すローカルの代わりにフィールドを変更しています。ローカルを使用してみてください。問題が解決します

for(auto current = queueFront; current < count; current++){
  cout<<"[" << current<<"] ,"<< list[current]<<" ";}
} 

注:autoの型がわからなかったので、型に使用しましたqueueFront。だと思いlist<int>::iteratorますが、定かではありません。正しい型に置き換えるautoか、そのままにして、コンパイラに型を推測させることができますcurrent

于 2012-10-19T20:08:14.817 に答える