2013-10-31 122 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(); 
    } 
} 
相關問題