所以我已经设定了使用以下公式在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;'的左手操作数(或者没有可接受的转换)
我已经尝试了所有我能想到的东西来摆脱这个错误,但它每次都会重新出现,对于如何解决这个问题有任何想法?
答案 0 :(得分:9)
std::cin >> farenheit >> endl;
此声明无效。从中删除>> endl
。
std::cin >> farenheit ;
此声明仅在您cout
某事时有效。喜欢这里。
std::cout << farenheit << endl ;
原因是endl
是用于输出新行的结束字符。因此只有输出流接受它。您可以在此处查看有关cin
和cout
的返回值和原型的更多信息。
答案 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>
库的工作方式(虽然使用对象)类似。