繁体   English   中英

C++ 错误 - 警告:有符号和无符号整数表达式之间的比较 [-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM