我正在一个面向对象程序的类中编写一个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
答案 0 :(得分:5)
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).