这是我目前正在处理的一些代码,我似乎无法找到一种方法让这个函数停止抛出"控件到达非void函数的结尾& #34;错误。不应该在else语句中捕获if语句没有并且返回true或false的任何内容吗?
bool operator == (const MyInt& x, const MyInt& y)
{
if (x.currentSize != y.currentSize)
{
return false;
}
else
{
for (int i = 0; i < x.currentSize; i++)
{
if (x.integer[i] != y.integer[i])
{
return false;
break;
}
else
return true;
}
}
}
答案 0 :(得分:2)
如果x.currentsize == 0
和y.currentsize == 0
,则您永远不会收到return
声明。
我觉得你打算写下面的代码。请注意,我们只有在return true
测试整个列表后才会bool operator==(const MyInt& x, const MyInt& y)
{
if (x.currentSize != y.currentSize)
return false;
for (int i = 0; i < x.currentSize; i++)
if (x.integer[i] != y.integer[i])
return false;
return true;
}
。
{{1}}
答案 1 :(得分:2)
如果您的方法没有通过for循环,则必须在第一个else
上加一个回报,例如,当x.currentSize = 0
此外,您的if
条件总是在第一次迭代后返回一个值,因此您应该像这样更改它,这样您就可以检查Array
bool operator == (const MyInt& x, const MyInt& y)
{
if (x.currentSize != y.currentSize)
{
return false;
}
else
{
for (int i = 0; i < x.currentSize; i++)
if (x.integer[i] != y.integer[i])
return false;
return true;
}
}
答案 2 :(得分:0)
这种错误的一般原因是难以阅读的错误代码。
按以下方式重写该功能
bool operator ==( const MyInt &x, const MyInt &y )
{
if ( x.currentSize == y.currentSize )
{
int i = 0;
while ( i < x.currentSize && x.integer[i] == y.integer[i] ) i++;
return ( i == x.currentSize );
}
return ( false );
}
或者,如果integer
是指针或数组,那么您可以应用标头std::equal
中声明的标准算法<algorithm>
。例如
#include <algorithm>
//...
bool operator ==( const MyInt &x, const MyInt &y )
{
return ( x.currentSize == y.currentSize &&
std::equal( x.integer, x.integer + x.currentSize, y.integer ) );
}
我认为这段代码看起来好多了不是吗?