【问题标题】:Error- no match for 'operator==' (operand types are 'std::basic_istream<char>' and 'char')错误 - 'operator==' 不匹配(操作数类型为 'std::basic_istream<char>' 和 'char')
【发布时间】:2021-06-28 03:05:56
【问题描述】:

我是 StackOverflow 的新手,并且是一般的编码新手。每当我尝试运行我的程序时都会收到此错误:

[错误] 'operator==' 不匹配(操作数类型为 'std::basic_istream' 和 'char')

这是因为我创建了一个函数来检查文件名(由他们之前输入的全名和学生 ID 组成)是否正确并且与他们正在制作的文件名相同。所以基本上:

Name: Lucius
Student ID: 12345678910

在文件名部分,他们输入:

File name: Lucius - 12345678910

它会检查它是否相同。

这是函数:

void filenamechecking(char studentname, char separatorchecking, int idnumber);


void filenamechecking (char studentname, char separatorchecking, int idnumber){
    
    const char dashchecking = '-' ;
    
    char filename;
    int filestudentid; 
    
    if (cin >> filename == studentname && 
        cin >> separatorchecking && separatorchecking == dashchecking &&
        cin >> filestudentid == idnumber) 
    {
        cout << "\n You have entered the appropriate file name" << endl;
    }
    else cout << "\n INVALID FILE NAME" << endl;  
}

这是我调用它的地方:

cout << "File Name (Student Name - Student Number): ";
filenamechecking (fullname, separatorinput, studentid);
cout << "\n";
                 
cin.sync();

【问题讨论】:

  • 错误:char filename ... cin &gt;&gt; filename == studentname。更好:std:string filename...
  • 您对以下建议的答案有任何疑问或问题吗?

标签: c++


【解决方案1】:

这里,在cin &gt;&gt; filename == studentname 中,cin &gt;&gt; filename 的返回将引用cin。因此,您比较 std::cinstudentname,因此与运算符 == 不匹配。

您还应该重新考虑在条件中使用的运算符precedence

这样做是正确的并且更具可读性:

if (cin >> filename && cin >> separatorchecking && cin >> filestudentid) // If input is valid
    if (filename == studentname && separatorchecking == dashchecking && filestudentid == idnumber)
        /* do processing */;

另外,您应该考虑使用std::string。因为 char 类型的文件名或学生名是一个值得商榷的选择。

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2020-12-12
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多