C ++错误-警告:有符号和无符号整数表达式之间的比较[-Wsign-compare]

时间:2020-10-02 00:15:59

标签: c++

我正在尝试实施数字排序程序,但是出现以下错误:

ERRORS

我能够在在线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;
   }

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

请想知道如何解决所有问题!

诊断信息表明您正在比较具有不同签名的数字。您可以通过不比较具有不同符号的数字来解决此问题。您可以在两侧使用有符号类型,也可以在两侧使用无符号类型。

除警告外,storage.size()-1是危险的操作,除非您首先强制要求容器为非空容器。如果从无符号零中减去,则会得到非常大的无符号值。这本身还不错,但是当您最终使用该大值作为下标时,您将获得不确定的行为。一种简单的解决方案是在比较的两边加上+1:i+1 < storage.size()

相关问题