2014-11-24 81 views
0

我的編譯器說並不是所有的控制路徑都返回一個值,它指向一個重載的>>變量函數。我不確定是什麼導致了這個問題,任何幫助將不勝感激。我想重載流提取操作符來定義輸入是否有效。如果不是,它應該設置一個失敗位來指示不正確的輸入。錯誤並非所有的控制路徑都返回一個值

std::istream &operator >> (std::istream &input, ComplexClass &c)//overloading  extraction operator 
    { 
     int number; 
     int multiplier; 
     char temp;//temp variable used to store input 


     input >> number;//gets real number 

     // test if character is a space 
     if (input.peek() == ' ' /* Write a call to the peek member function to 
           test if the next character is a space ' ' */) // case a + bi 
     { 
      c.real = number; 
      input >> temp; 

      multiplier = (temp == '+') ? 1 : -1; 
     } 
      // set failbit if character not a space 
     if (input.peek() != ' ') 
     { 
      /* Write a call to the clear member function with 
      ios::failbit as the argument to set input's fail bit */ 
      input.clear(ios::failbit); 
     } 
     else 

       // set imaginary part if data is valid 
      if (input.peek() == ' ') 
      { 
       input >> c.imaginary; 
       c.imaginary *= multiplier; 
       input >> temp; 
      } 
      if (input.peek() == '\n' /* Write a call to member function peek to test if the next 
               character is a newline \n */) // character not a newline 
      { 
       input.clear(ios::failbit); // set bad bit 
      } // end if 
      else 
      { 
        input.clear(ios::failbit); // set bad bit 
      } // end else 
      // end if 
     if (input.peek() == 'i' /* Write a call to member function peek to test if 
             the next character is 'i' */) // test for i of   imaginary number 
     { 
      input >> temp; 

      // test for newline character entered 
      if (input.peek() == '\n') 
      { 
       c.real = 0; 
       c.imaginary = number; 
      } // end if 

      else if (input.peek() == '\n') // set real number if it is valid 
      { 
       c.real = number; 
       c.imaginary = 0; 
      } // end else if 
      else 
      { 
       input.clear(ios::failbit); // set bad bit 

      } 


      return input; 
     } 
    } 

回答

0

return語句裏面只有最後執行的,如果:

if (input.peek() == 'i') { 
    ... 
    return input; 
} 

應改爲:

if (input.peek() == 'i') { 
    ... 
} 
return input; 
相關問題