2015-12-19 2 views
1

У меня возникли проблемы с реализацией связанного списка и возвратом значений списка на экран. Пожалуйста, извините, если это было задано раньше - я не мог его найти, и, возможно, я не знаю, как правильно задать вопрос!C++: Связанные списки, указатели на строки

Я только тестирую этот код, прежде чем я его создаю для большей функциональности, но я не могу сходить с земли. Я прокомментировал здесь какой-то код для возможного использования в будущем. Я не включил другие методы ниже, только 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";  
    } 
} 
+0

Я не вижу никаких следов вещей, которые вы написали в своем названии. – LogicStuff

+0

";" необходимо после класса AddressBook – user3514538

ответ

1

Необходимо инициализировать «лицо».

У вас есть определение «PeopleInfo * person» внутри класса «AllNames», а это означает, что человек является указателем на память типа «PeopleInfo».

Дело в том, что на самом деле это не указывает на что-либо. Вы только говорите, что это может указать на такой класс.

Поскольку «человек» является пустым или мусором (вы ничего не делали), попытка присвоить что-то человеку-> lname приведет к сбою программы. Если вы попытаетесь отладить содержимое person-> lname, это также сработает.

Чтобы решить эту проблему:

Перед первой строке конструктора AllNames (справа перед тем "человек-> LNAME = "последний";") поставил команду:

человек = новый PeopleInfo();

+0

!!! Конечно! Спасибо огромное! Это беспокоило меня с прошлой ночи! Я попытался инициализировать всех членов в структурах и прокомментировать конструктор, но столкнулся с той же проблемой в Display. Спасибо Спасибо спасибо! – feniksmeesha

+0

Это стандартная ошибка, которая встречается часто. Вы присоединились к рядам бесконечных программистов, которые были разочарованы этим. Добро пожаловать. –

Смежные вопросы