2

我被要求为我的推荐课程创建一个汽油泵程序,但我在运行它时遇到问题,目前这是编译器在尝试编译代码 完整构建对话框时输出的主要内容

1>m:\visual studio 2010\projects\referral\referral\main.cpp(56): error C2678: binary '>>' : no operator found which take a left-hand operand of type '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;
}

我环顾四周,我能找到的唯一解决方案是包括我已经完成的解决方案,但我看不到任何其他解决方案。

有比我更细心的人愿意看一看并告诉我哪里出错了吗?

我也知道我的代码效率低下,对此我深表歉意。

4

2 回答 2

14

改变

cin >> "Please enter a pump code:" >> code;

cout << "Please enter a pump code: ";
cin >> code;

您需要更改cin >> "string"代码中的所有内容。这并不意味着提示用户输入。相反,您实际上是在尝试写入字符串文字。

于 2013-08-05T15:11:10.643 回答
4

Just for some added color on top of Yang's answer, this is not a "binary error" as suggested in the title. The error message refers to binary'>>'. >> is a binary operator, and binary operators take two operands, one on each side. + and - are functioning as binary operators in the following:

1 + 2
var1 - var2

A unary operator takes just one operand. & and - are functioning as unary operators in the following:

my_pointer = &n;
int var3 = -5;

The important part in the error message you're getting:

binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)

is the last bit, "or there is no acceptable conversion". There certainly is a >> operator which takes a left hand operand of std::istream, but there is no >> operator defined which takes a string literal on the right hand side, since string literals can't be assigned to. In this case, std::cin >> myvar takes stuff from std::cin and tries to put it into the variable myvar, but there's no way you can stuff anything into a string literal like "Please enter a pump code:", as that would be like trying to do:

"Please enter a pump code:" = 5;

which is obviously nonsense.

于 2013-08-05T15:22:14.370 回答