2016-03-03 75 views
0

我不斷收到此錯誤,但我不明白爲什麼。編譯器告訴我這是在這個部分。警告C4715:'operator ==':並非所有控制路徑都返回一個值

任何幫助,將不勝感激

bool operator==(const Bitmap& b1, const Bitmap& b2){ 
    // TODO: complete the == operator 
    if ((b1.height == b2.height) && (b1.width == b2.width)) 
    { 

     for (int r = 0; r < b1.height; r++) 
     { 

      for (int c = 0; c < b1.width; c++) 
      { 
       if (b1.get(r, c) == b2.get(r, c)) 
       { 

       } 
       else 
        return false; 
      } 

     } 

    } 
    else 
     return false; 
} 
+1

想象一下,如果b1.height,b2.height,b1.width和b2.width都爲零。在這種情況下,你需要輸入第一個代碼塊,但是不要進入兩個for循環中的任何一個....並且你不會在最後輸入「return false」,因爲這只是針對「else 「 案件。相反,你只是放棄函數的底部,函數返回的值將是未定義的。 –

回答

0

從編譯器的診斷是正是它說。

注意的是,如果for循環運行到結束,沒有考慮如果條件返回false,如果r達到b1.height值,執行路徑將達到這個函數的結尾沒有明確的return

0

錯誤信息非常清楚。

bool operator==(const Bitmap& b1, const Bitmap& b2){ 

    if ((b1.height == b2.height) && (b1.width == b2.width)) 
    { 
     for (int r = 0; r < b1.height; r++) 
     { 
      for (int c = 0; c < b1.width; c++) 
      { 
       ... 
      } 
     } 
     return ???; // What should be returned here? 
    } 
    else 
     return false; 
} 
0

該錯誤消息告訴什麼是錯誤的。

bool operator==(const Bitmap& b1, const Bitmap& b2){ 
    // TODO: complete the == operator 
    if ((b1.height == b2.height) && (b1.width == b2.width)) 
    { 

     for (int r = 0; r < b1.height; r++) 
     { 

      for (int c = 0; c < b1.width; c++) 
      { 
       if (b1.get(r, c) == b2.get(r, c)) 
       { 

       } 
       else 
        return false; 
      } 

     } 
     return true; // I guess you forgot this line 

    } 
    else 
     return false; 
} 
0

那麼,這正是錯誤所說的。編譯器不知道是否有可能觸發嵌套for循環中的代碼。假設第一個條件成立,那麼代碼有可能永遠不會返回到return語句。因此編譯器會確保總是返回一些東西,而不管你給它什麼樣的條件。

bool operator==(const Bitmap& b1, const Bitmap& b2){ 
if ((b1.height == b2.height) && (b1.width == b2.width)) 
{ 
    // The compiler expects a return statement that is always reachable inside this if. 

    for (int r = 0; r < b1.height; r++) 
    { 

     for (int c = 0; c < b1.width; c++) 
     { 
      if (b1.get(r, c) == b2.get(r, c)) 
      { 

      } 
      else 
       return false; //This isn't always reachable. 
     } 

    } 
} 
else 
    return false; // This case is covered, so nothing wrong here. 
} 
0

很簡單。

bool operator==(const Bitmap& b1, const Bitmap& b2){ 
// TODO: complete the == operator 
if ((b1.height == b2.height) && (b1.width == b2.width)) 
{ 

for (int r = 0; r < b1.height; r++) 
{ 

    for (int c = 0; c < b1.width; c++) 
    { 
     if (b1.get(r, c) == b2.get(r, c)) 
     { 

     } 
     else 
      return false; 
    } 

} 
// if your function runs to end of for loop, you get to here 
} 
else 
    return false; 
//then here 
return false; //<-- add this 
} 
相關問題