我正在尝试创建一个具有值的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;
}
答案 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功能,因为我写了这个答案。该部分仅适用于您的原始帖子。