[英]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.