2016-07-22 66 views
0
Save=0; 
bool checking() const; ///declaration 

inline bool isZombie() const //definition 
{ if(Save==0) {return cc_t < 0} 
    if(Save==1) {return cc_i < 0;} 
} 

這是一個非常天真的問題。我明白代碼中錯誤的含義。任何人都可以告訴我,爲什麼它不接受條件中的退貨聲明。 如果我寫上面的代碼爲不返回,在函數返回非void {在日食CDT}

bool checking() const //definition 
{ if(Save==0) {return cc_t < 0} 
    else {return cc_i < 0;} 
} 

那麼,沒有警告..?

+0

什麼是 '保存' 的類型? –

+1

只是因爲這種方式'返回'聲明可能永遠達不到 – DimChtz

+0

你的代碼缺少';',否則它是合法的,如果一個壞主意。警告是因爲如果保存爲3,您的代碼將執行未定義的行爲。 – Yakk

回答

3

實際上Save的類型是什麼?您在其他可能的分支中缺少return聲明。關於該警告的內容不清楚?

inline bool isZombie() const //definition 
{ if(Save==0) {return cc_t < 0;} 
          //^Supposed this is a typo 
    if(Save==1) {return cc_i < 0;} 
    return false; // <<<<<<<<<<<<<<<<<<<<<<<<<<< 
} 
+0

即使Save是一個bool,如果eclipse錯過了邏輯,我也不會感到震驚。 –

+0

πάνταῥεῖ的例子允許你如果被處理兩次(通常是不好的設計),但是;在功能上它返回第一個,第二個或默認爲false。默認爲false是這裏的關鍵。 – M4rc

+0

@JohanLundberg你確實相信這是Eclipse-CDT的問題嗎? –

1

通常,最好有一個確定的回報路徑。

例如,一個可以寫爲(並保持你的代碼大多不變):

inline bool isZombie() const { 
    if(Save==0) 
     return cc_t < 0; 
    else 
     return cc_i < 0; 
} 

,或者:

inline bool isZombie() const { 
    bool rVal = (cc_i < 0); 
    if(Save==0) 
    return cc_t < 0; 
    return rVal; 
} 
+2

或'return((Save == 0)?cc_t:cc_i)<0;' – GManNickG

+0

的確,但我想保持現有格式的易於追蹤的邏輯。對於一些人來說,可讀性會產生更好的理解這並不意味着你的建議會變得更加正確,這取決於他在C++中的曝光可能難以在心理上進行解析。 – M4rc