程序始终返回二进制'>>' :找不到哪个运算符带有类型错误的左侧操作数

时间:2012-10-18 15:30:03

标签: c++ temperature

所以我已经设定了使用以下公式在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&gt; m:\ visual studio 2010 \ projects \ week 5 \ week 5 \ main.cpp(26):error C2678:binary'&gt;&gt;' :找不到哪个运算符采用类型为'std :: basic_istream&lt; _Elem,_Traits&gt;'的左手操作数(或者没有可接受的转换)

我已经尝试了所有我能想到的东西来摆脱这个错误,但它每次都会重新出现,对于如何解决这个问题有任何想法?

2 个答案:

答案 0 :(得分:9)

std::cin >> farenheit >> endl;

此声明无效。从中删除>> endl

std::cin >> farenheit ;

此声明仅在您cout某事时有效。喜欢这里。

std::cout << farenheit << endl ;

原因是endl是用于输出新行的结束字符。因此只有输出流接受它。您可以在此处查看有关cincout的返回值和原型的更多信息。

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

答案 1 :(得分:3)

std::endl实际上是一个函数,并且未定义流入其中的运算符。是的,这是一个令人困惑的错误信息,因为它抱怨LHS而不是RHS。

它的实现类似于:

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

Streaming然后定义了这样的东西:

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

它实际上是iostream的一个“强大”功能​​,因为您可以编写一个带有该签名的函数,并将该函数流式传输到您的流中以使用iostream执行操作。

事实上,这与<iomanip>库的工作方式(虽然使用对象)类似。