1

私は Little Man のコンピューター シミュレーションを書いています。Indexing operator をオーバーロードしたいと考えてい []ます。LMC というクラスを作成し、次のことを行いました。

#include <iostream>

using namespace std;

class LMC
{
   public:
       LMC();
       void display();
       int& operator[](int index);
       ~LMC();
   private:
       int **array;
};

LMC::LMC()
{
   array = new int*[100];
   for(int i = 0; i < 100; i++)
   {
       array[i] = new int[3];
   }
   return array;
}

void LMC::display()
{
    for(int i = 0; i < 100;i++)
    {
       for(int j = 0; j <3;j++)
       {
          array[i][j] = 0;
          array[i][2] = i;
          cout << array[i][j]<<" ";
       }
       cout << endl;
    }
 }
 int& LMC::operator[](int index)
 {
    return array[index][2];
 }

  LMC::~LMC()
  {
     for(int i =0; i < 100 ; i++)
     { 
        delete [] array[i];
     }
     delete [] array;
     array = NULL;
  }

  int main()
  {
     LMC littleman;
     while(true)
     {
         int mailbox;
         int function;
         cout << "What is Mailbox number?" << endl;
         cin >> Mailbox;
         cout << "What is the function you want to use?" <<endl;
         cin >> finction;
         //the function is numbers eg 444 and 698;
         littleman.display();
         littleman[Mailbox] = function;
      }
     return 0;
}

エラーなしでプログラムを実行できます。私がそれmailbox = 0を述べたときfunction = 123、それは問題ありません。

次のように表示されます。

0 0 0
1 0 0
2 0 0
3 0 0
//continuing to 99

この表示は間違っています。以下を表示する必要があります。

0 0 123
1 0 0
2 0 0
//continuing to 99

論理エラーがありますか、それとも配列をオーバーライドして元の配列を表示していますか?どうすれば修正できますか?

4

2 に答える 2

1

コードにいくつかのエラーがあり、コンパイルできません。

  • LMC()コンストラクターには、がありますreturn array;。コンストラクターは何も返さないので(returnタイプすらありません)、コンストラクターで使用することはできませんreturn
  • の後void LMC::display()に、;これは定義ではなく実装であるため、エラーになります。あなたはそれを省略してそのままにしておくべきですvoid LMC::display() { <...> }
  • void LMC::display()}の直前に、最後にクロージングがありませんoperator[]
  • 関数の代わりにmain()タイプミスMailbox(ある場合は大文字のM、別の場合は通常のm。C+++では異なる変数)がMailboxあります。mailboxfinction

あなたの問題に関しては、あなたは関数内のarayの値を書き直していますdisplay()

array[i][j] = 0;
array[i][2] = i;

そのため、結果は表示されません。

于 2012-09-06T10:20:07.473 に答える
0

これらの行

  array[i][j] = 0;
  array[i][2] = i;

LMC::display()表示しようとしている配列の内容を破棄します。

さらに、 の最後に余分なセミコロンがあるvoid LMC::display();ため、コードはコンパイルされません。

于 2012-09-06T10:18:57.907 に答える