-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

输出:

JJJJJJJJJJJJJJ

4

3 回答 3

5

好吧 - 可能是这个原因。您分配而不是比较。您将零分配给 i。'if' 测试失败(它为零),所以 exit 没有被调用,其余的例程运行 i == 为零。

   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

正如其他人指出的那样,您正在执行分配而不是比较,因此“比较”将始终被视为错误 - 比较的结果是分配的值,在这种情况下为 0。

尽管它从未变得非常流行,但有一个相当简单的技术可以避免这个问题:当你与一个常数进行比较时,总是把常数放在左边。这样,如果您输入错误==as =,代码将无法编译:

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