2015-12-08 19 views
0

我一直在教自己的C++,我遇到了一些问题。希望你能指导我。基本上,在主要方法中,我创建了一个名为“s1”的学生对象,我试图使用名为“getResults(double gpa)”的学生类下创建的方法来获得他的GPA的结果。我如何让我的方法在C++中识别我的对象值

首先,我遇到一个错误,指出“无效操作数为二进制表达式(‘ostream的’(又名‘basic_ostream’)和空')

据我所知,有关这个错误张贴在一些问题StackOverflow,但我需要一些帮助和解释关于这个具体的上下文这个错误的含义。

我需要帮助的另一件事是,因为我使用s1对象调用方法,有没有办法我可以写方法“getResults()”,以便它可以自动检索学生对象的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; 
} 
+5

'getResult()'不返回任何东西,它被声明为'void'。试图输出'void'会扰乱编译器,因为流不知道如何输出'void'。 –

+3

C++不是Java。您不必使用访问说明符修饰每个成员。例如,在'Human'类中,只有一个'protected:'和一个'public:'就足够了。 –

+1

你真的需要从阅读这本书开始,而不是我要求的所有人。你正试图用C++编写Java代码,这不会带你到任何地方。 – SergeyA

回答

2

目前,您getResults函数有一个void返回类型,这意味着它实际上并不返回任何。正因为如此,请不要试图在你的main函数中使用这个函数的结果cout

考虑以下编辑:

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

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

此外,由于你的getResults并没有真正得到什么,我建议更改名称为类似printResults

注意

注意如何在getResult它不任何东西,因为它是一个空白。在这个功能,你只是输出文本到控制台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"; 
    } 
} 

当你在你的主要的声明,它试图cout什么因为getResult是无效:

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

这就是为什么你只需要拨打getResult而不是试图cout它。

+0

明白了!谢谢!但我只是好奇,所以我不能在方法中指出?我必须总是返回一个字符串或其他东西? –

+1

您可以在功能中输入“cout”;我的答案只是说当你调用这个函数时,不要试图'cout',因为它的getResult本身并不会返回任何你可以'cout'的东西。我会尝试编辑我的答案,以帮助清除这个:) –

+0

哦,好吧!那么我会在这里露营。谢谢! –

相关问题