我不明白這個警告我的小功能:警告:「並不是所有的控制路徑返回一個值」 C++
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -1;
}
}
如果有人能幫助我嗎?
我不明白這個警告我的小功能:警告:「並不是所有的控制路徑返回一個值」 C++
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -1;
}
}
如果有人能幫助我嗎?
這是因爲,正如警告所說,並非代碼的所有路徑都會返回一個值,而函數具有不同的返回類型,它告訴編譯器「嗨,我會返回一些東西。」但你實際上並沒有這樣做,如果Dest
一個不爲1或2
你的評論:
Dest can only be 1 or 2 (it's an enum)
是好的,但只有你知道,你的編譯器不,它不會接受你的話。它只能看到你的代碼的靜態屬性,它不能預測運行時如何去,因此它不會接受你的代碼。對於所有它知道Dest
可以通過
你應該添加某種默認值的外部的代碼等等等等改變:
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
}
return 0;
}
正如@NathanOliver所說,警告意味着可能有一種情況,您的函數可能不會返回任何值。更確切地說,如果用戶輸入的值不是1或2,那麼你的函數不會返回任何值。
你可能會認爲你只打算輸入1或2.但編譯器不知道這一點。
你可以做的是 -
Though I would not recommend ignoring the warning. In general, it is better to pay heed to the warnings. In the long run, it saves you from many bugs in case you are working on big projects.
下面是更正後的代碼 -
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
default:
return 0;
}
}
或者你可以做到這一點 -
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
}
return 0;
}
不要*忽略警告*。更改代碼以刪除警告是微不足道的。 – NathanOliver
在函數的末尾添加回報XXX那麼這將確保編譯器不會無論如何都沒有發生價值迴歸的情況下到達函數的末尾。
如果dest
是隻有兩個值的枚舉,這是不必要的複雜 - return Dest == 1 ? Fct_1(nb1,nb2) : -1;
就夠了。 否則,請將case 2:
替換爲default:
。
如果你說的Dest
確實是一個枚舉,編譯器不應該在你的情況下發出警告。至少我的編譯器沒有。所以,下面的代碼編譯沒有任何警告/錯誤:
enum {
x = 1,
y = 2
} Dest;
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return -5; //Fct_1(nb1,nb2);
case 2 :
return -1;
}
}
int main() {
}
然而,如果Dest
是一個整數,或者如果枚舉定義比1
和2
其他值,然後我得到一個錯誤也是如此。這可以被固定用default
路徑:
enum {
x = 1,
y = 2,
z = 3
} Dest;
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return -5; //Fct_1(nb1,nb2);
case 2 :
return -1;
default:
return 0;
}
}
如果目的地只能是1或2,你可以重寫這樣
int Fct_name (int nb1, int * nb2)
{
if(Dest == 1) return Fct_1(nb1,nb2);
return -1;
}
如果'dest'不是1或2,會發生什麼? – NathanOliver
你沒有'默認'案例 – CoryKramer
我試圖把一個默認的案例,但警告仍然存在。 Dest只能是1或2(這是一個枚舉) – Guigui