2013-10-31 86 views
3

我在codepad.org上运行hhe以下代码,并且出现此错误。 “在成员函数 '双交换网::用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 
} 
+0

我知道的背景可能是一个好主意,所以这里是......那是由三个部分组成问题。问题3:股票有两个部分:代码和价格。设计具有这两个属性的类库。你的类应该有一个构造函数,该函数接受两个属性的值,返回符号和价格的访问函数以及改变价格的增变函数。给出接口和成员函数。 –

+0

for循环的索引变量与stocks.size()的无符号返回值不匹配。 i(signed int) Sambuca

+0

问题4:使用问题3中的类库,提供以下解决方案:a)实现'addstock'函数,该函数将新库存矢量股票。 b)执行成员函数'getprice',它返回具有符号等于参数符号的矢量“股票”中的股票价格。 –

回答

10

这里:

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

i是有符号整数,stocks.size()是无符号。您可以使用std::size_t,或者,如果您想更加精确,请使用vector<Stock>::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(); 
    } 
} 
相关问题