Итак, передо мной была поставлена задача создать преобразователь температуры в 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): ошибка C2678: двоичный файл ‘>>’: не найден оператор, который принимает левый операнд типа ‘std :: basic_istream<_Elem, _Traits> ‘(или нет приемлемого преобразования)
Я перепробовал все, что мог придумать, чтобы избавиться от этой ошибки, но она появляется каждый раз, есть идеи, как это исправить?
std::cin >> farenheit >> endl;
Это утверждение неверно. Удалить >> endl
от него.
std::cin >> farenheit ;
Это утверждение действительно только тогда, когда вы cout
что-то. Как здесь.
std::cout << farenheit << endl ;
Причина в том, что endl
символ конца строки, используемый для вывода новой строки Так что только выходной поток принимает это. Вы можете посмотреть больше о возвращаемых значениях и прототипах cin
а также cout
Вот.
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>
Библиотека также работает (хотя это использует объекты).