Меня попросили создать программу с бензиновым насосом для моей реферальной курсовой работы, и у меня возникла проблема с ее запуском, в настоящий момент это главное, что выводит компилятор при попытке скомпилировать код полный диалог сборки здесь
1> m: \ visual studio 2010 \ projects \ referral \ referral \ main.cpp (56): ошибка C2678: двоичный файл ‘>>’: не найден оператор, который принимает левый операнд типа ‘std :: istream’ ( или нет приемлемого преобразования)
#include <iostream>
#include <istream>
#include <ostream>
#include <fstream>
#include <ctime>
#include <cmath>
#include <string>
#include <Windows.h>
using namespace std;
int reciept();
int pump;
int petrol;
int main()
{
bool exit = false;
int code;
string p1w ("Waiting");
string p2w ("Waiting");
string p3w ("Waiting");
string p4w ("Waiting");
string p1r ("Ready");
string p2r ("Ready");
string p3r ("Ready");
string p4r ("Ready");
if (GetAsyncKeyState(VK_ESCAPE))
{
exit = true;
}
cout << "***************************************************" << endl;
cout << "*Liquid Gold v1.0.0 Last revised 18/07/13 *" << endl;
cout << "*The process of processing transactions is simple,*" << endl;
cout << "*activate a pump by entering its code shown below.*" << endl;
cout << "*After pump operation is verified (generally 10 *" << endl;
cout << "*seconds though this may vary) the attendant *" << endl;
cout << "* will be able to enter the amount of petrol to 3 *" << endl;
cout << "*decimal places which will then be converted based*" << endl;
cout << "*on a predetermined price (which can be altered in*" << endl;
cout << "*price.txt) and once this process is complete a *" << endl;
cout << "*receipt will be created (you will need seperate *" << endl;
cout << "*software in order to print this recipt) and the *" << endl;
cout << "*transaction will be terminated. *" << endl;
cout << "*© Simple Software Solutions 2013 *" << endl;
cout << "***************************************************" << endl << endl;
system("Pause");
while (exit == false)
{
cout << " Pump (1) - " << p1w << " Pump (2) - " << p2w << endl << endl << endl;
cout << " Pump (3) - " << p3w << " Pump (4) - " << p4w << endl << endl << endl;
cin >> "Please enter a pump code:" >> code;
if (code == 1)
{
swap (p1w, p1r);
pump = 1;
cin >> "Please enter the amount of petrol deposited" >> petrol;
break;
}
else if (code == 2)
{
swap (p2w, p2r);
pump = 2;
cin >> "Please enter the amount of petrol deposited" >> petrol;
break;
}
else if (code == 3)
{
swap (p3w, p3r);
pump = 3;
cin >> "Please enter the amount of petrol deposited" >> petrol;
break;
}
else if (code == 4)
{
swap (p4w, p4r);
pump = 4;
cin >> "Please enter the amount of petrol deposited" >> petrol;
break;
}
else
{
cout << "Invalid pump code entered";
}
reciept();
{
ofstream transactions;
transactions.open ("reciept.txt");
transactions << "****************************************************/n";
transactions << " SALE /n";
transactions << "****************************************************/n /n";
}
}
return 0;
}
Я осмотрелся, и единственное решение, которое я могу найти для этой ошибки, — это то, что я уже сделал, и я не вижу другого решения.
Кто-нибудь более наблюдательный, чем я, хочет посмотреть и сказать мне, где я иду не так?
Также я знаю, что мой код — неэффективный беспорядок, и я прошу прощения за это.
+ Изменить
cin >> "Please enter a pump code:" >> code;
в
cout << "Please enter a pump code: ";
cin >> code;
Вам нужно изменить все cin >> "string"
в вашем коде. Это не означает приглашение пользователя для ввода. Вместо этого вы фактически пытаетесь записать строковый литерал.
Просто для некоторого дополнительного цвета поверх ответа Янга, это не «двоичная ошибка», как предлагается в заголовке. Сообщение об ошибке относится к binary'>>'
, >>
бинарный оператор, и бинарные операторы принимают два операнда, по одному на каждой стороне. +
а также -
функционируют как бинарные операторы в следующем:
1 + 2
var1 - var2
унарный Оператор принимает только один операнд. &
а также -
действуют как унарные операторы в следующем:
my_pointer = &n;
int var3 = -5;
Важная часть в сообщении об ошибке, которое вы получаете:
двоичный ‘>>’: не найден оператор, который принимает левый операнд
тип ‘std :: istream’ (или нет приемлемого преобразования)
последний бит, «или нет приемлемого преобразования». Там, безусловно, есть >>
оператор, который принимает левый операнд std::istream
, но нет >>
определенный оператор, который принимает строковый литерал справа, поскольку строковые литералы не могут быть назначены. В этом случае, std::cin >> myvar
берет вещи из std::cin
и пытается положить его в переменную myvar
, но вы никак не можете вставить что-либо в строковый литерал, например "Please enter a pump code:"
, как это было бы, как пытаться сделать:
"Please enter a pump code:" = 5;
что, очевидно, глупость.