![](/img/trans.png)
[英]warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
[英]C++ Error - warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
我正在尝试实现数字排序程序,但出现以下错误:
我能够在在线 C++ 编译器上编译和运行代码,但是当我必须通过终端运行它时,在尝试这样做之后,它将不再编译。 代码本身实际上没有任何问题,因为它们只是警告。 但我想知道如何修复它们,拜托!
错误来自我代码的这些部分:
void sort()
{
int i, j;
for (i = 0; i < storage.size()-1; i++)
{
for (j = 0; j < storage.size()-i-1; j++)
{
if (storage[j] > storage[j+1]) // swap the values
{
int temp = storage[j];
storage[j] = storage[j+1];
storage[j+1] = temp;
}
}
}
}
void print()
{
for(int i = 0; i < storage.size(); i++)
cout<<storage[i]<<" ";
cout<<endl;
}
vector<int> getList()
{
return storage;
}
void setList(vector<int> list)
{
storage = list;
}
};
void quickSort(int start, int end)
{
if (start < end)
{
int part = partition(start, end);
quickSort(start, part - 1);
quickSort(start + 1, end);
}
}
void sort()
{
quickSort(0, storage.size() - 1);
}
void print()
{
for(int i = 0; i < storage.size(); i++)
cout<<storage[i]<<" ";
cout<<endl;
}
任何帮助都感激不尽。 谢谢!
想知道如何修复它们,请!
诊断表明您正在比较不同符号的数量。 您可以通过不比较不同符号的数量来解决这个问题。 您可以在两侧使用有符号类型或在两侧使用无符号类型。
除了警告之外, storage.size()-1
是一个危险的操作,除非您首先强制容器为非空。 如果你从一个无符号零中减去,你会得到一个非常大的无符号值。 这本身并不坏,但是当您最终使用那个大值作为下标时,您会得到未定义的行为。 对此的简单解决方案是在比较的两侧添加 +1: i+1 < storage.size()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.