#include <iostream>
#include <string>
using namespace std;
class Person{
public:
Person(string n, int a, string g) {
setName(n);
setAge(a);
setGender(g);
}
void setName(string x) {
name = x;
}
void setAge(int x) {
age = x;
}
void setGender(string x) {
gender = x;
}
get() {
return "\nName: " + name + "\nAge: " + age + "\nGender: " + gender + "\n";
}
private:
string name;
int age;
string gender;
};
int main() {
return 0;
}
这是我的代码,我想做的就是用构造函数创建一个基本类,有三个参数,定义名称,年龄和性别,出于某种原因,当我尝试运行它来检查一切是否正常好的,我得到一个错误说明(第23行):不匹配的类型'const __gnu_cxx :: __ normal_iterator。
有人可以通过修复我的代码来帮忙吗?我真的不明白我做错了什么,提前谢谢!
答案 0 :(得分:4)
问题出在这里:
public:
...
get() {
return "\nName: " + name + "\nAge: " + ... + gender + "\n";
}
由于未定义此方法的返回值,并且您尝试将int
的值附加到std::string
+
,这是不可能的。由于您需要更复杂的输出格式而不仅仅是附加字符串,因此您可以使用std::ostringstream
:
public:
...
std::string get() {
std::ostringstream os;
os << "\nName: " << name << "\nAge: " << ... << gender << std::endl;
return os.str();
}
不要忘记#include <sstream>
旁注:
Person(string n, int a, string g) {
setName(n);
setAge(a);
setGender(g);
}
在Person
班级内,您可以直接访问private
成员:
Person(string n, int a, string g) : name(n), age(a), gender(g) { }
答案 1 :(得分:2)
您的get
函数需要返回类型。此外,在C ++中,您不能自由地+
字符串和其他对象。请尝试使用std::stringstream
,这样您就可以输入字符串,数字等:
string get() {
basic_stringstream ss;
ss << endl
<< "Name: " << name << endl
<< "Age: " << age << endl
<< "Gender: " << gender << endl;
return ss.str();
}
您需要在顶部添加#include <sstream>
。
答案 2 :(得分:2)
您不能将int type(age)添加到字符串类型(名称,性别)。首先将年龄转换为字符串。
答案 3 :(得分:2)
答案 4 :(得分:1)
我不确定,但我认为是因为你的get()
函数没有声明返回类型。它应该是string get()
。话虽如此,它是一个奇怪的错误消息,这样的错误。