大家。这是我第一次在C ++中使用类。我正在处理的作业中的说明对我来说似乎有些含糊不清,所以我将它们包括在内,以防更有经验的人认为我在代码中没有正确地遵循它们。
无论如何,我编写了我的程序,它根据我对作业的看法运作并创建了我想要的输出。但是,当我运行它时,会弹出一个错误,显示“无效的空指针”。我做了一些研究,但我似乎无法弄清楚为什么会这样。
有人可以帮我修复我的代码并帮助学生了解他们做错了什么吗?谢谢! :)
分配
编写包含以下字段和方法的Person类:
•名字
•姓氏
•身份证号码 •必要的施工人员
• 返回姓氏,名字,全名和身份证号码的方法 • 打印姓氏,名字和身份证号码的方法编写一个主程序来测试你的课程。
我的计划
#include <iostream>
#include <string>
using namespace std;
class Person {
private:
string FirstName;
string LastName;
string FullName;
int IDNumber;
public:
void SetFirstName(string);
void SetLastName(string);
void SetIDNumber(int);
string SetFullName(string first, string last);
string GetFirstName();
string GetLastName();
string Method1();
string Method2();
int GetIDNumber();
};
void Person::SetFirstName(string first) {
FirstName = first;
}
void Person::SetLastName(string last) {
LastName = last;
}
void Person::SetIDNumber(int ID) {
IDNumber = ID;
}
string Person::SetFullName(string first, string last) {
FullName = string(first + " " + last);
return FullName;
}
string Person::GetFirstName() {
return FirstName;
}
string Person::GetLastName() {
return LastName;
}
int Person::GetIDNumber() {
return IDNumber;
}
string Person::Method1() {
cout << "LAST NAME: " << LastName << endl;
cout << "FIRST NAME: " << FirstName << endl;
cout << "FULL NAME: " << FullName << endl;
cout << "ID NUMBER: " << IDNumber << endl;
return 0;
}
string Person::Method2() {
cout << "LAST NAME: " << LastName << endl;
cout << "FIRST NAME: " << FirstName << endl;;
cout << "ID NUMBER: " << IDNumber << endl;
return 0;
}
int main() {
string firstname, lastname;
int id;
char command;
Person Person;
cout << "What is the subject's first name? For example: Bob Smith" << endl;
cin >> firstname >> lastname;
cout << "What is " << firstname << " " << lastname << "'s ID number?" << endl;
cin >> id;
Person.SetFirstName(firstname);
Person.SetLastName(lastname);
string fullname = Person.SetFullName(firstname, lastname);
Person.SetIDNumber(id);
cout << "COMMANDS:" << endl;
cout << "f : Returns first name." << endl << "l : Returns last name." << endl << "i : returns ID number." << endl << "n : returns full name." << endl;
cout << "1 : Returns last name, first name, full name, and ID number." << endl;
cout << "2 : Returns last name, first name, and ID number." << endl << endl;
cout << "Please input the letter of your command: ";
cin >> command;
switch (command) {
case 'f':
case 'F':
cout << "FIRST NAME: " << Person.GetFirstName() << endl;;
break;
case 'l':
case 'L':
cout << "LAST NAME: " << Person.GetLastName() << endl;
break;
case 'i':
case 'I':
cout << "ID NUMBER: " << Person.GetIDNumber() << endl;
break;
case 'n':
case 'N':
cout << "FULL NAME: " << fullname << endl;
break;
case '1':
Person.Method1();
cout << endl;
break;
case '2':
Person.Method2();
cout << endl;
break;
default:
cout << "That is not a valid command." << endl;
}
}
答案 0 :(得分:1)
string Person::Method1() {
// ...
return 0;
}
有你的问题。
您的方法返回std::string
。 0,在此上下文中,被视为NULL
指针,并且您的代码在尝试将NULL
指针转换为字符串时爆炸。
P.S。如果您使用调试器逐步执行代码,那么您可以自己解决问题,而不是向stackoverflow.com
上的陌生人寻求帮助。学习如何使用调试器是每个C++
开发人员必备的技能。