为什么我的函数没有执行i ++?

时间:2012-04-21 00:14:36

标签: c++ string object for-loop

我正在一个面向对象程序的类中编写一个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文件中的length方法,供参考:

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

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

  return (counter);
}

另外:String1 = Jello World

输出:

   J J J J J J J J J J J J

3 个答案:

答案 0 :(得分:5)

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

   if( i = '\0')
   {
       exit(1);
   }

答案 1 :(得分:4)

您还没有真正展示足够的代码,以便能够弄清楚您的代码在做什么,但这看起来不正确:

  if( i = '\0')

单个=符号会导致i在表达式的右侧分配值。
if( '\0' )评估为if(false)

答案 2 :(得分:0)

正如其他人所指出的那样,你正在做一个赋值而不是比较,所以“比较”总是被视为假 - 比较的结果是赋值,在这种情况下是0。

虽然它从未变得非常受欢迎,但有一种相当简单的技术可以避免这个问题:当你比较常数时,总是将常数放在左边。这样,如果您将==错误地键入为=,则代码将无法编译:

 if ('\0' = i)   // error: lvalue required (or something on that order).
相关问题