2014-09-12 66 views
-1

我正在學習有關課程,我在練習時偶然發現了這個問題。我很困惑,爲什麼我會得到amount的垃圾輸出,並且爲什麼事先顯示amount的正確值。正在顯示的垃圾值

我哪裏錯了?

我粘貼了輸出。

#include<iostream> 
using namespace std; 

class Resort{ 
    float charges ; 
    int days ; 
    float amount ; 
    float compute() ; 
public: 
    void getdata(); 
    void disp(); 
}; 

void Resort::getdata(){ 
    cout<<"\nCharges : "; 
    cin>>charges ; 
    cout<<"\nNo of days : "; 
    cin>>days ; 
} 

void Resort::disp(){ 
    cout<<"\nCharges : "<<charges 
     <<"\nDays : "<<days 
     <<"\nAmount : "<<compute()<<endl ; 
} 

float Resort::compute(){ 
    amount = (days*charges) ; 
    cout<<amount; 
} 

int main(){ 
    Resort obj ; 
    obj.getdata(); 
    cout<<"\n\n"; 
    obj.disp(); 
} 

enter image description here

+4

打開/關閉編譯器的警告級別。 – chris 2014-09-12 12:46:47

+4

請編譯所有警告和調試信息(例如'g +++ -Wall -g')並學習如何使用調試器** – 2014-09-12 12:47:32

+0

我啓用了-Wall編譯器設置。那是你在說@BasileStarynkevitch的那個人嗎? – 2014-09-12 13:09:10

回答

0

不必返回從compute功能什麼,但你在disp 輸出其返回值。

你可能想是這樣的:

​​
+0

它解決了這個問題,但爲什麼我的編譯器沒有顯示錯誤?預先顯示的值是什麼?我正在使用代碼塊。 – 2014-09-12 12:52:16

+1

https://stackoverflow.com/questions/6260917/why-there-is-no-compiler-error-when-return-statement-is-not-present – dohashi 2014-09-12 12:56:39

0

爲了防止變量垃圾值,您可以定義度假村類構造並提供默認值的變量,所以,即使您忘記處理變量的值,然後您將顯示您初始化的值,而不是垃圾值。 例如 您可以在類定義中包含這樣的構造函數。

public: 
    Resort() 
    { 
     charges = (float)0.0 ; 
     days = 0; 
     amount = (float)0.0; 
    } 

並專門針對上面的代碼,你需要調用該函數用於打印值之前調用計算功能。

+0

爲什麼不只是0.0f? – acrilige 2014-09-12 13:33:54

0

disp您嘗試打印返回值compute,但您忘記在那裏添加返回值。您還可以打印兩次,因爲compute也打印到cout

未來的提示是始終儘可能多地打開編譯器警告標誌(對於g++,這是-Wall)。這樣做可能會讓你的編譯器在compute中警告你省略了返回值。