我在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
}
Run Code Online (Sandbox Code Playgroud)
jua*_*nza 11
这里:
for(int i=0; i < stocks.size(); i++)
Run Code Online (Sandbox Code Playgroud)
i是有符号整数,stocks.size()是无符号的.您可以使用std::size_t,或者,如果您想更精确,请使用vector<Stock>::size_type.
for(vector<Stock>::size_type i=0; i < stocks.size(); i++) { .... }
Run Code Online (Sandbox Code Playgroud)
此警告试图阻止的问题是签名到无符号转换的否定产生了大量数据,很可能不是您想要的.除此之外,有符号整数的数值范围与相同大小的无符号整数的数值范围不同.
有关更多信息,请参阅C++类型.
请注意,这在C++ 11中更容易:
for(const auto& stock : stocks)
{
if(stock.getsymbol()==symbol) //added getsymbol "()"
{
return stock.getprice();
}
}
Run Code Online (Sandbox Code Playgroud)