"Invalid operands to binary expression (ostream and void)" 是什么意思,如何解决?

What does "Invalid operands to binary expression (ostream and void)" mean, and how can it be fixed?

我遇到一个错误:

Invalid operands to binary expression ('ostream' (aka 'basic_ostream') and 'void')

我知道 Whosebug 上发布了一些与此错误相关的问题,但我需要有关此错误含义的特定上下文的一些帮助和解释。

main() 函数中,我创建了一个名为 s1 的学生对象。错误发生在 main() 中,我正在尝试使用 Student class 的一种名为 getResults(double gpa).

的方法来获取他的 GPA 结果
#include <iostream>

using namespace std;

class Human{
    protected: string name;
    protected: int age;
    
public: Human(){
        name = "Unknown";
        age = 5;
    }
    
public:
    Human(string name, int age){
    this->name = name;
    this->age = age;
}
    
    string getName(){
        return name;
    }
    
    int getAge(){
        return age;
    }
    
    void setName(string name){
        this->name = name;
    }
    
    void setAge(int age){
        this->age = age;
    }        
};

class Student: public Human{
    protected: string school;
    protected: double gpa;
    
public:
    Student(string name, int age, string school, double gpa) : Human(name, age){
        this->school = school;
        this->gpa = gpa;
    }
    
    double getGPA(){
        return gpa;
    }
    
    string getSchool(){
        return school;
    }
    
    void setGPA(double gpa){
        this->gpa = gpa;
    }
    
    void setSchool(string school){
        this->school = school;
    }
    
    void getResult(double gpa){
        if (gpa < 3.0) {
            cout << "You did well!";
        } else {
            cout << "Try harder next time";
        }
    }
    
};

int main() {
    Student s1 ("John", 23, 'm', "University of Chicago", 3.4);
    double s1GPA = s1.getGPA();
    cout << s1.getResult(s1GPA) << endl;
    return 0;
}

目前,您的 getResults 函数有一个 void return 类型,这意味着它实际上 return 没有任何东西.正因为如此,不要试图 cout 在你的 main 中这个函数的结果。

考虑以下编辑:

// Your result is printed within this function
s1.getResult(s1GPA);

// Print a new line if you wish
cout << endl;

此外,由于您的 getResults 并没有真正 get 任何东西,我建议将名称更改为 printResults.

备注

请注意,在您的 getResult 中,它没有 return 任何内容,因为它是空的。在此函数中,您只是使用 cout:

将文本输出到控制台
// Notice that this function doesn't actually return anything
void getResult(double gpa){
    if (gpa < 3.0) {
        // Output this message to console
        cout << "You did well!";
    } else {
        // Output this message to console
        cout << "Try harder next time";
    }
}

当你在 main 中有语句时,它试图 cout nothing 因为 getResult 是空的:

cout << s1.getResult(s1GPA) << endl;
//      ^^^^^^^^^^^^^^^^^^^
//      This doesn't return anything for cout to output.

这就是为什么您只需要调用 getResult 而不是尝试 cout 的原因。