用户定义的类中的空指针无效?

时间:2016-05-08 00:11:02

标签: c++ class compiler-errors

大家。这是我第一次在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;
    }
}

1 个答案:

答案 0 :(得分:1)

string Person::Method1() {

    // ...

    return 0;
}

有你的问题。

您的方法返回std::string。 0,在此上下文中,被视为NULL指针,并且您的代码在尝试将NULL指针转换为字符串时爆炸。

P.S。如果您使用调试器逐步执行代码,那么您可以自己解决问题,而不是向stackoverflow.com上的陌生人寻求帮助。学习如何使用调试器是每个C++开发人员必备的技能。