【问题标题】:Warning: Comparison between signed and unsigned integer expression警告:有符号和无符号整数表达式之间的比较
【发布时间】:2013-11-11 02:15:06
【问题描述】:

我在 codepad.org 上运行以下代码,我收到此错误。 “在成员函数'double Xchange::getprice(std::string)'中: 第 87 行:警告:有符号和无符号整数表达式之间的比较"

这是我的代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Xchange
{
public:
    Xchange();//does nothing (?)

    double getprice(string symbol);

private:
    vector <Stock> stocks;
};

double Xchange::getprice(string symbol)
{
    for(int i=0; i < stocks.size(); i++) {
        if(stocks[i].getsymbol()==symbol) {
            return stocks[i].getprice();
        }
    }

    return -1; //means not found
}

【问题讨论】:

  • 我知道背景可能是个好主意,所以这里是......这是一个三部分的问题。问题 3:股票有两个部分:代码和价格。设计一个具有这两个属性的 Stock 类。你的类应该有一个构造函数,它接受两个属性的值,访问器函数用于返回符号和价格,以及一个改变价格的 mutator 函数。给接口和成员函数。
  • for 循环的索引变量与stocks.size() 的无符号返回值不匹配。 i(有符号整数)
  • 问题 4:使用问题 3 中的 Stock 类,提供以下解决方案: a) 实现“addstock”功能,将新股票(股票)添加到矢量股票。 b)实现成员函数'getprice',它返回向量'stocks'中股票的价格,其符号等于参数symbol。
  • @sashoalm 如何帮助新用户改进他们的第一个问题(甚至远没有那么糟糕),而不是简单地对他们投反对票? (arne 打败了我编辑本身)
  • @Angew 当我看到不好的标题或问题时,我会投反对票。这就是反对票的目的。顺便说一句,自从标题修复以来,我已经撤回了我的反对票。

标签: c++ class


【解决方案1】:

这里:

for(int i=0; i < stocks.size(); i++)

i 是有符号整数,stocks.size() 是无符号整数。您可以使用std::size_t,或者,如果您想要更精确,请使用vector&lt;Stock&gt;::size_type

for(vector<Stock>::size_type i=0; i < stocks.size(); i++) { .... }

此警告试图防止的问题是负符号到无符号的转换会产生很大的数字,并且很可能不是您想要的。除此之外,有符号整数的数值范围与相同大小的无符号整数的数值范围不同。

更多信息请参见C++ types

请注意,这在 C++11 中更容易:

for(const auto& stock : stocks)
{
    if(stock.getsymbol()==symbol) //added getsymbol "()"
    {
        return stock.getprice();
    }
}

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2014-12-15
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多