【问题标题】:warning C4018: '>' : signed/unsigned mismatch [closed]警告 C4018:“>”:有符号/无符号不匹配 [关闭]
【发布时间】:2013-06-20 01:19:03
【问题描述】:

任何人都可以帮助我解决已签名的未签名不匹配问题吗?这是关于如果 my_size

void set::add(SET_ITEM_TYPE newItem)
  // post: If newItem is not in this set, newItem is added
  //       and the size of the set increased by +1.

 {
     if (positionOf(newItem) == -1 )
  {

  if(my_size >= my_item.capacity())
  {
    my_capacity = 2 * my_item.capacity();
    my_item.resize( my_capacity );
  }
    my_item[my_size] = newItem;

     my_size++;
  }
}

【问题讨论】:

  • 错误(实际上很可能只是一个警告)是不言自明的。 my_item.capacity() 返回一个无符号类型,并将其与有符号类型进行比较。
  • 如果你想知道这里的问题是什么,我们需要知道类型是什么。即,my_size 的类型是什么,my_item.capacity 的类型是什么。
  • 您也想修复缩进。实际上,总体而言,您在这里的格式非常糟糕。
  • 警告的原因是算术转换。如果您将intunsigned int 进行比较,则int 将“转换”为unsigned int,这会使任何负值变为正值,因此即使在数学上进行比较也是错误的是的。
  • 我的猜测是 my_item 是 SET_ITEM_TYPE 或其他东西的向量(因为 capacityresizeoperator [](int)

标签: c++ compiler-errors


【解决方案1】:

假设my_size 被定义为int,您可以通过将其类型更改为unsigned int 来解决此问题。大小不能为负数;为什么要签名?

std::vector::size 等返回无符号类型是有原因的)

【讨论】:

  • 感谢@Magtheridon96
猜你喜欢
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多