2014-07-08 77 views
1

我正在開發一個基於距離和速度計算時間的程序,以及何時將從點a到點b取而代之的最終時間獲得100英里我得到南或inf取決於我的班級如何設置。有人能幫助我嗎?我班的將變量打印爲nan或inf而不是實際值

部分:

class Trip 
{ 
private: 
    string chicago, illinois, destCity, destState; 
    double distance, time, rate; 

public: 
    Trip() 
    { 
     chicago = "Chicago"; 
     illinois = "Illinois"; 
     destCity = ""; 
     destState = ""; 
     distance = 0.0; 
     time = 0.0; 
     rate = 0.0; 
    } 

    Trip(string city, string state, double distance) 
    { 
     chicago = "Chicago"; 
     illinois = "Illinois"; 
     destCity = city; 
     destState = state; 
     distance = 0.0; 
     time = 0.0; 
     rate = 0.0; 
    } 

這是一個構造函數是什麼樣子在我的主要方法:

Trip atlanta("Atlanta", "Georgia", 587); 

,然後這裏有一些突變的方法,可能是問題的一部分:

void Trip::setRate(double mph) 
{ 
    mph = rate; 
} 

void Trip::calcTime() 
{ 
    time = distance/rate; 
} 

現在如果我成立了我的課像這樣

this->city = ""; 
this->distance = 0.0; 
當我使用accesor方法來檢索時間,距離等

是打印爲「南」但如果我有我的課設置喜歡它

city = ""; 
distance = 0.0; 

然後我得到「INF」。 當我調試程序時,trip元素顯示出所有的變量都是0,即使我使用構造函數將值傳遞給類成員。我不知道發生了什麼問題。

+0

確保'rate'總是一個非0的值 – Keugyeol

+4

@DBR:看看你的'setRate()'函數,並詢問那個分配正在做什麼。 – Blastfurnace

回答

3

在這個函數:

Trip(string city, string state, double distance) 
{ 
    // ... 
    distance = 0.0; 

最後一行將功能參數distance。不是班級成員。班級成員仍然不健康,所以有時候打印出來會導致垃圾。

爲了解決這個問題,你可以寫this->distance = 0.0;,或者最好使用構造函數初始化列表:

Trip(string city, string state, double distance) 
    : chicago("Chicago") 
    , distance(distance) 
    , // etc. 
{ 
} 

和/或比你使用的類成員的參數使用不同的名稱。

在初始化列表中,distance(distance)表示this->distance初始化爲參數distance,因爲括號外的內容必須是類成員的名稱。


在C++ 11你可以在類的定義,避免了您不必重複它們在每一個構造函數中設置默認值:

class Trip 
{ 
private: 
    string chicago, illinois, destCity, destState; 
    double distance = 0.0; 
    double time = 0.0; 
    double rate = 0.0; 

注意,沒有必要初始化string小號空白;他們有一個默認的構造函數,所以未初始化的strings保證是空字符串,而不是垃圾。

+1

+1:不能解釋未初始化的值可能會導致計算後的輸出爲'nan'或'inf',但足夠接近。 –

+1

對。我不太確定班級成員「芝加哥」和「伊利諾伊」的目的! –

+1

實際上我把它當作this-> distance = distance,但忘了在玩幾件東西之後忘了改回它,因爲@ blastface指出我的setRate方法在錯誤的地方有變量,這實際上導致了一個完整的問題。感謝您解釋這一點,我改變了一些基於你的格式,改變了參數名稱,一切都運行平穩! – DBR

相關問題