Reputation: 53
I'm encountering an error that says:
Invalid operands to binary expression ('ostream' (aka 'basic_ostream') and 'void')
I understand there are some questions related to this error posted on StackOverflow but I need some help and explanations regarding this specific context on what this error means.
In the main()
function, I create a student object called s1
. The error happens in main()
where I'm trying to get the results of his GPA using a method of the Student
class called getResults(double 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;
}
Upvotes: 0
Views: 203
Reputation: 5637
Currently, your getResults
function has a void
return type, which means it doesn't actually return anything. Because of this, do not try to cout
the result of this function in your main.
Consider the following edit:
// Your result is printed within this function
s1.getResult(s1GPA);
// Print a new line if you wish
cout << endl;
Also, since your getResults
doesn't really get anything, I'd suggest changing the name to something like printResults
.
Note
Notice how in your getResult
it doesn't return anything because it's a void. In this function, you're just outputting text to the console with 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";
}
}
When you have the statement in your main, it's trying to cout
nothing because getResult
is a void:
cout << s1.getResult(s1GPA) << endl;
// ^^^^^^^^^^^^^^^^^^^
// This doesn't return anything for cout to output.
That is why you only need to call getResult
instead of trying to cout
it.
Upvotes: 3