2012-10-18 15 views
2

所以我已經設置任務++創建在C溫度轉換器使用這個公式:程序總是返回二進制「>>」:沒有運營商發現這需要類型的錯誤左手操作數

Celsius = (5/9)*(Fahrenheit – 32) 

到目前爲止我已經想出這個(我已經削減了10日線的價值從一開始就意見,以便發佈的代碼開始於第11行,如果讓任何意義)

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main() 
{ 
float celsius; 
float farenheit; 

std::cout << "**************************" << endl; 
std::cout << "*4001COMP-Lab5-Question 1*" << endl; 
std::cout << "**************************" << endl << endl; 
std::cout << "Please enter a temperature in farenheit: "; 
std::cin >> farenheit >> endl; 
std::cout << "Temperature (farenheit): " << endl; 
std::cout << "Temperature (celsius): " << celsius << endl; 
std::cin.get(); 
return 0; 
} 

每次我嘗試運行這個程序我收到一個錯誤,每次出現這個錯誤:

1> m:\ visual studio 2010 \ projects \ week 5 \ week 5 \ main.cpp(26):error C2678:binary'>>':找不到操作符,它需要一個類型的左操作數「的std :: basic_istream < _Elem,_Traits>」(或沒有可接受的轉換)

我用盡了一切我能想到的擺脫這種錯誤,但它再次出現每次,任何關於如何想法解決這個問題?

+1

是cin之後必需的endl嗎? (sry,我的C++技能現在被粉碎了......) –

+0

爲什麼'std :: cout'和'using namespace std;'?請一個或另一個。 – john

+0

可以使用std :: endl,唯一的區別是std :: endl會刷新輸出緩衝區,'\ n'不會。如果您不希望頻繁刷新緩衝區,請使用'\ n'。如果你這樣做(例如,如果你想獲得所有的輸出,並且程序不穩定)。 –

回答

9
std::cin >> farenheit >> endl; 

此聲明無效。從中刪除>> endl

std::cin >> farenheit ; 

此聲明僅在您使用cout時有效。像這兒。

std::cout << farenheit << endl ; 

的原因是,endl是用於輸出一個新行結束行字符。所以只有輸出流接受它。您可以在這裏查看有關退貨價格和cincout的原型的更多信息。

http://en.cppreference.com/w/cpp/io

+0

您對cout的陳述並不完全準確,endl可與任何ostream一起使用,它實際上是一個接受ostream&並返回一個的函數。它實現爲參數寫一個換行符,調用它的flush方法,然後返回它。 – CashCow

+0

你說得對。考慮到OP是一個初學者,我避免了完整的解釋。 –

+0

這就是至少得到了程序運行,謝謝:) –

3

std::endl實際上是一個功能和操作者涌進它沒有定義。是的,這是一個令人困惑的錯誤消息,因爲它抱怨LHS而不是RHS。

它的實現是一樣的東西:

namespace std { 
    std::ostream& endl(std::ostream& os) 
    { 
    os << '\n'; 
    os.flush(); 
    return os; 
    } 
} 

流了那麼定義是這樣的:

namespace std { 
    std::ostream & operator<<(std::ostream & os, (std::ostream& *)(std::ostream&) func) 
    { 
    return func(os); // or is it (*func)(os) 
    } 
} 

它實際上是iostream的相當多的「強大」的功能,因爲你就可以編寫一個函數通過該簽名並將該函數流式傳輸到您的流中,以便使用iostream進行處理。

這實際上與<iomanip>庫的工作原理類似(雖然它使用的是對象)。

相關問題