簡體   English   中英

C ++:鏈接列表,指向字符串的指針

[英]C++: Linked Lists, Pointers to strings

我在實現鏈接列表時遇到麻煩,無法將列表的值返回到屏幕。 如果您以前曾問過這個問題,請原諒-我找不到,也許我不知道如何正確地問這個問題!

我只是在測試此代碼之前,先對其進行擴展以實現更多功能,但似乎無法下手。 我在這里注釋了一些代碼,以備將來使用。 我沒有包括下面的其他方法,僅包括Display,特別是因為其中沒有內容。

我運行了cout語句,發現我在諸如person-> lname之類的語句中遇到了問題。 這將編譯,但不會運行。 嘗試調試時,字符串標題出現錯誤。

任何幫助是極大的贊賞!

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

    struct Birthday
    {
        int month;
        int day;
        int year;
    };

    struct Anniversary
    {
        int month;
        int day;
        int year;
    };

    struct Address
    {
        string street;
        string city;
        string state;
        int zip;
    };

    struct PeopleInfo
    {
        string lname;
        string fname;
        Address fulladdr;
        Birthday bday;
        Anniversary aday;
        //PeopleInfo* nextperson;
    };

    class AddressBook
    {
    public:
        AddressBook();
        AddressBook(string);
        void NewPerson();
        void DeletePerson();
        void SetName();
        void SetAddress();
        void SetDates();
        void Search(string);
        void Sort();
        void Display();
        void BDayCard();
        void ADayCard();
    private:
        PeopleInfo* person;
        //PeopleInfo* currentperson; 
        int length;
    };

    AddressBook::AddressBook()
    {
        person->lname = "last";
        person->fname = "first";
        person->fulladdr.street = "default st.";
        person->fulladdr.city = "anytown";
        person->fulladdr.state = "NJ";
        person->fulladdr.zip = 00000;
        person->bday.month = 0;
        person->bday.day = 0;
        person->bday.year = 0;
        person->aday.month = 0;
        person->aday.day = 0;
        person->aday.year = 0;
        length = 0;
        //person->nextperson->lname = NULL;

        //currentperson->nextperson->lname = NULL;
    }
    void AddressBook::Display()
    {
        cout << person->lname << ", " << person->fname << " " << endl
            << person->fulladdr.street << endl
            << person->fulladdr.city << ", " << person->fulladdr.state << " " << person->fulladdr.zip << endl
            << "Birthday: " << person->bday.month << "/" << person->bday.day << "/" << person->bday.year << endl
            << "Anniversary: " << person->aday.month << "/" << person->aday.day << "/" << person->aday.year << endl << endl;
    }

// Function Prototypes
void Menu(char &entry);
void Action(char &entry, AddressBook AllNames);

// Main
int main()
{
    cout << "test\n";
    char entry;
    cout << "test\n";
    AddressBook AllNames;
    cout << "test\n";
    do
    {
        Menu(entry);
        Action(entry, AllNames);
    } while (!(entry == 'E' || entry == 'e'));
return 0;
}

void Menu(char &entry)
{
    cout << "\nADDRESSBOOK\n\n"
        << "(N) Enter New Name\n"
        << "(D) Delete a Name\n"
        << "(C) Change a Name/Date\n"
        << "(U) Update Anniversary/Birthday\n"
        << "(S) Show Address Book Entries\n"
        << "(B) Make a Birthday Card\n"
        << "(A) Make an Anniversary Card\n"
        << "(E) Exit Program\n\n";
    cin >> entry;
    cout << "\n";
}

void Action(char &entry, AddressBook AllNames)
{
    switch (entry)
    {
    case 'N':
    case 'n': AllNames.NewPerson(); break;
    case 'D':
    case 'd': AllNames.DeletePerson(); break;
    case 'C':
    case 'c': AllNames.SetName(); break;
    case 'U':
    case 'u': AllNames.SetDates(); break;
    case 'S':
    case 's': AllNames.Display(); break;
    case 'B':
    case 'b': AllNames.BDayCard(); break;
    case 'A':
    case 'a': AllNames.ADayCard(); break;
    case 'E':
    case 'e': break;
    default: "\nPlease input a valid entry\n";      
    }
}

您需要初始化“人”。

您在“ AllNames”類中定義了“ PeopleInfo * person”,這意味着person是指向“ PeopleInfo”類型的內存的指針。

問題是它實際上沒有指向任何東西。 您只是在說它可以指向此類。

由於“ person”為null或垃圾(您一無所獲),因此嘗試將某些內容分配給person-> lname會導致程序崩潰。 如果嘗試調試person-> lname的內容,那也會崩潰。

解決問題:

在AllNames構造函數的第一行之前(就 “ person-> lname =” last“;”之前),輸入以下命令:

人=新的PeopleInfo();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM