cin: 未找到采用左操作数的运算符

cin: No Operator Found Which Takes A Left-Hand Operand

我正在尝试将两个 space 分隔的变量和 运行 放入此错误中,以及 [没有运算符 ">>" 匹配这些操作数] 和 [语法错误: " >>"].

#include <iostream>
#include <string>
#include <vector>
using namespace std;

...

void player(char array[][ROWS_AND_COLUMNS], char letter)
{
    bool element_occupied = false;

    do
    {
        int row = 0;
        int column = 0;
        cout << "Enter player " << letter << ", row and column:";
        cin >> inputValidate(row, 1, 3) >> inputValidate(column, 1, 3);

        if (array[(row - 1)][(column - 1)] == '*')
        {
            array[(row - 1)][(column - 1)] = letter;
            element_occupied = true;
        }
        else
        {
            cout << "Sorry, that spot is taken." << endl;
            element_occupied = false;
        }

    } while (element_occupied == false);
}

inputValidate() 接受输入、最小值和最大值,returns 接受输入值(如果是 1、2 或 3)。

编辑:

int inputValidate(int user_number, int lowest, int highest)
{

    while (!(cin >> user_number) || (user_number < lowest || user_number > highest))
    {
        cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
        cin.clear();
    }

    return user_number;
}

这是一款井字游戏。

inputValidate() returns a temporary int,一个 operator>> 无法读入的右值。它需要一个左值(即,一个有名字的变量)。这就是为什么您在 cin >> inputValidate(...) 语句中收到错误。

即使该语句可以编译,使用它也没有任何意义。 inputValidate() 自己读取 cin,所以 player() 不应该试图将 inputValidate() 的 return 值传递给 cin >> 来开始和。 inputValidate() 会读入一个经过验证的数字,return 它,然后 player 会尝试读入一个新的未经验证的数字来覆盖它。

就此而言,传递 user_number 参数根本没有意义。您正在 按值 传递它,只是为了立即用用户输​​入覆盖它。所以 player() 传入的值是无关紧要的。如果你想 return 用户的输入,那么 user_number 应该是 inputValidate() 内部的局部变量。否则,它应该是 通过引用 传递的输出参数,而 inputValidate() 的 return 值应该是 void.

此外,当 operator>> 由于输入无效而在 inputValidate() 内失败时,您不会丢弃导致它失败的输入。 cin.clear() 仅重置流的错误状态,不会丢弃任何数据。为此,您需要致电 cin.ignore()

话虽如此,试试这样的东西:

#include <iostream>
#include <string>
#include <vector>
#include <limits>
using namespace std;

...

int inputValidate(int lowest, int highest)
{
    int user_number;

    do
    {
        if (!(cin >> user_number))
        {
            cout << "Invalid. Enter a valid number: ";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        else if (user_number < lowest || user_number > highest)
        {
            cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
        }
        else break;
    }
    while (true);

    return user_number;
}

void player(char array[][ROWS_AND_COLUMNS], char letter)
{
    int row, column;

    do
    {
        cout << "Enter player " << letter << ", row and column:";
        row = inputValidate(1, 3) - 1;
        column = inputValidate(1, 3) - 1;

        if (array[row][column] == '*')
            break;

        cout << "Sorry, that spot is taken." << endl;
    }
    while (true);

    array[row][column] = letter;
}