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 '>>' : no operator found which take a left-hand operand of type 'std::basic_istream <_Elem,_Traits>'(或没有可接受的转换)

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

4

2 回答 2

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

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

std::cin >> farenheit ;

这句话只有当你cout有事时才有效。像这儿。

std::cout << farenheit << endl ;

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

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

于 2012-10-18T15:31:23.503 回答
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>库如何工作的概念(尽管它使用对象)。

于 2012-10-18T15:33:40.320 回答