-1

オブジェクト指向プログラムのクラス内に get 関数を書いていますが、i++何らかの理由でコードが実行されません。

これは私の.cppファイルで使用されているものです:

char MyString::Get(int i)
{
  if( i = '\0')
  {
    exit(1);
  }
  else
  {
    return String[i];
  }
}

これは、main.cpp ファイルで呼び出されるものです。

for(int i=0; i < String1.Length()+1; i++) 
{
  cout<< String1.Get(i)<<" ";
}

cout << endl;

これは、参照用の .cpp ファイルの長さの方法です。

int MyString::Length()
{
  int counter(0);

  while(String[counter] != '\0')
  {
    counter ++;
  }

  return (counter);
}

また: String1 = Jello World

出力:

JJJJJJJJJJJJJ

4

3 に答える 3

5

まあ - おそらくこれが原因です。比較する代わりに割り当てました。i にゼロを割り当てました。これは「if」テストに失敗したため (ゼロです)、exit は呼び出されず、残りのルーチンは i == to zero で実行されました。

   if( i = '\0')
   {
       exit(1);
   }
于 2012-04-21T00:19:09.520 に答える
4

誰かがあなたのコードが何をしているかを理解できるほど十分なコードを示していませんが、これは間違っているように見えます:

  if( i = '\0')

単一の=シンボルによりi、式の右側の値が割り当てられます。
if( '\0' )に評価されif(false)ます。

于 2012-04-21T00:18:50.653 に答える
0

他の人が指摘しているように、比較ではなく割り当てを行っているため、「比較」は常に false として扱われます。比較の結果は割り当てられた値であり、この場合は 0 です。

圧倒的に普及したことはありませんが、この問題を回避するかなり簡単な方法があります。定数と比較するときは、常に定数を左側に置きます。このように、==asを誤っ=て入力すると、コードはコンパイルされません。

 if ('\0' = i)   // error: lvalue required (or something on that order).
于 2012-04-21T00:27:56.660 に答える