C ++ Person Class - 无法输出值&修改元素

时间:2018-03-19 06:42:43

标签: c++ function class object

我正在尝试创建一个具有值的Person类:string name,int age,int height,int weight。我应该实例化一个Person对象,给它值,并输出这些值。另外,我应该有一个ModifyPerson函数接受Person对象作为参数,并更改名称成员变量并输出它。任何帮助将不胜感激。

编辑:我目前只有代码的问题是正确输出person1的成员值

EDIT2:已修复!谢谢Zebrafish

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

    class Person 
    {
        string name;
        int age, height, weight;
    public:
        void set_values(string, int, int, int);
        string ModifyPerson();
        void coutDetails() const;
    }person1;

    void Person::set_values(string a, int b, int c, int d) 
    {
        name = "Rob";
        age = 19;
        height = 71;
        weight = 180;
    }

    string Person::ModifyPerson()
    {
        string name = "Robert";
        return name;
    }

    void Person::coutDetails() const
    {
        cout << "\nName: " << name << "\nAge: " << age << "\nHeight: " <<         
        height << "\nWeight: " << weight;
    }

    std::ostream& operator<<(const std::ostream&, const Person& person1)
    {
        person1.coutDetails();
        return std::cout;
    }

    int main()
    {
        Person person1;
        person1.set_values("Rob", 19, 71, 180);
        cout << person1 << endl;
        cout << person1.ModifyPerson() << endl;
        return 0;
    }

1 个答案:

答案 0 :(得分:1)

此行失败的原因:

cout << person1 << endl;

错误消息告诉:

  

'&lt;&lt;':没有找到哪个操作符采用类型的右操作数   '人'(或没有可接受的转换)

std :: cout,它是一个std :: ostream对象,没有运算符&lt;&lt;取一个Person对象,除非你专门创建一个。

第二个cout行:

cout << person1.ModifyPerson() << endl;

由于其他原因而失败。你的类Person中肯定有方法ModifyPerson(),但它有两个问题:

1)返回类型不同

2)您已将ModifyPerson()定义为全局函数,而不是成员类方法。

所以你需要确保返回类型是相同的,当你定义ModifyPerson()方法时,你应该预先设置类的名称,如下所示:

string Person::ModifyPerson(){}

我有一种感觉,你已经知道这一点,因为你在方法set_values前面加上了Person ::

代码看起来像这样:

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

class Person
{
    string name;
    int age, height, weight;

public:
    void set_values(string, int, int, int);
    string ModifyPerson();
}person1;

void Person::set_values(string a, int b, int c, int d)
{
    name = "Rob";
    age = 19;
    height = 71;
    weight = 180;
}

string Person::ModifyPerson()
{
    string name = "Robert";
    return name;
}

int main()
{
    Person person1;
    person1.set_values("Rob", 19, 71, 180);
    //cout << person1 << endl;
    cout << person1.ModifyPerson() << endl;
    return 0;
}

此外,如果你想能够写cout&lt;&lt; person1你需要编写一个全局函数,它将std :: ostream作为第一个参数,如:

std::ostream& operator<<(const std::ostream&, const Person& person)
{
    person.coutDetails();
    return std::cout;
}

Person的coutDetails()方法可以如下所示:

void Person::coutDetails() const
{
    cout << "\nName: " << name << "\nAge: " << age << "\nHeight:" <<
        height << "\nWeight: " << weight;
}

编辑:我注意到你改变了你的ModifyPerson功能,因为我写了这个答案。该部分仅适用于您的原始帖子。