2013-09-26 3 views
1

настоящего времени у меня этот код для моего класса узла, который хранит два названия, идентификационный номер, и имеет следующую способность:Узла Реализация конструктора класса

class Node{ 
public: 
    char LastName[20] ; 
    char FirstName[20] ; 
    int IDnumber ; 
    Node *Next ; 

Node(); 
void printNode(); 
}; 

Это конструктор, я использую для инициализации переменных узлов с клавиатуры:

Node::Node(){ 

cout << "Enter ID number: " << endl; 
cin >> IDnumber; 
cout << "Enter last name: " << endl; 
cin >> LastName; 
cout << "Enter first name: " << endl; 
cin >> FirstName; 
Next=NULL; 
} 

void Node::printNode(){ 
cout << "ID number: " << IDnumber << endl; 
cout << "Last name: " << LastName <<endl; 
cout << "First name: " << FirstName << endl; 
} 

проблема, которую я имею, что всякий раз, когда я вызвать функцию printNode() позже в своем коде, мой код не выполняет первую строку функции printNode(). (необработанное исключение) Я также не могу выполнить этот код, когда пытаюсь вызвать node-> Далее с моим отдельным классом связанных списков. Это заставляет меня думать, что я правильно не строю узел. любые идеи о том, что может быть неправильным в моем коде?

Связанный список - это отдельный класс, в котором используется класс узлов I, опубликованный выше.

class LinkedList{ 

private: 
Node* list; 
Node* createNode(); 
Node* searchLocation(int); 

public: 

LinkedList(); 
~LinkedList(); 

void InsertNode(); 
void SearchNode(); 
void PrintList(); 
void DeleteNode(int); 

}; 


LinkedList::LinkedList(){ 
Node* list = NULL; 
} 

Node* LinkedList::createNode(){ 
Node *NewNode = new Node(); 
return NewNode; 
} 

void LinkedList::InsertNode(){ 
Node* insert = createNode(); 
if (list == NULL){ 
    list = insert;}} 

void LinkedList::PrintList(){ 
Node* temp = list; 
while (temp != NULL){ 
temp->printNode(); 
temp = temp->Next; 
} 
} 

функция перечень печать() мой класс LinkedList терпит неудачу, когда list-> printNode() (есть перерыв в соиЬ < < IDNumber линии), а также не в списке = list-> Далее строки.

int main(){ 

int num = 0; 
    LinkedList list; 

    int menu=0; 
    while(menu != 5){ 

    cout << endl << "Choose a menu option." <<endl 
    << "1. Insert node " << endl << "2. Delete node " << endl 
    << "3. Print list" << endl << "4. Search a node & print info" << endl 
    << "5. Quit program " << endl; 


    cin >> menu; 
    menu = validate(menu); 

switch(menu){ 
case 1: 
    list.InsertNode(); 

break; 

case 3: 
    list.PrintList(); 

break; 
}} 

return 0; 

    } 
+0

пожалуйста, вставьте также, как вы создаете объект Node и как использовать он позже – 4pie0

+0

alrighty, я отправил его – user2105982

+0

Функция 'PrintList' уничтожает единственный указатель, который у вас есть в вашем списке, действительно ли это то, что вы хотите? –

ответ

0

У вас мало ошибок в коде. самое главное, вы ссылаетесь на локальный указатель list, который всегда NULL, когда вы должны обратиться к некоторым общим Node, то есть к статической переменной.

здесь вы можете найти рабочий раствор, добавьте тело для правильного списка открепления

~LinkedList(){} 

и вы в порядке:

LinkedList:

class LinkedList{ 

private: 
static Node* list; 
Node* createNode(); 
Node* searchLocation(int); 

public: 
LinkedList(); 
~LinkedList(){} 
void InsertNode(); 
void SearchNode(); 
void PrintList(); 
void DeleteNode(int); 
}; 

Node* LinkedList::list = NULL; 
       ^
    don't foget to initialize pointer to static object 

LinkedList::LinkedList(){ 
Node* list = NULL; 
} 

Node* LinkedList::createNode(){ 
Node *NewNode = new Node(); 
return NewNode; 
} 

void LinkedList::InsertNode(){ 
Node* insert = createNode(); 
if(list==NULL)list=insert; 
else 
    list->Next = insert; 
} 

void LinkedList::PrintList(){ 
Node* temp = list; 
while (temp != NULL){ 
temp->printNode(); 
temp = temp->Next; 
} 
} 

и главный:

int main(){ 

int num = 0; 
    LinkedList list; 

    cout << endl << "Choose a menu option." <<endl 
    << "1. Insert node " << endl << "2. Delete node " << endl 
    << "3. Print list" << endl << "4. Search a node & print info" << endl 
    << "5. Quit program " << endl; 

    list.InsertNode(); 
    list.InsertNode(); 

    list.PrintList(); 

return 0; 

} 

выход: Выберите пункт меню. 1. Вставить узел 2. Удалить узел 3. Распечатать список 4. Поиск узла & распечатать информацию 5.Выход программы
Введите номер ID: Введите фамилию: я Введите имя: J Введите идентификационный номер: Введите фамилию: к Введите имя: л

ID номер: 8

Фамилия: я

имя: J

номер ID: 9

Фамилия: к

Имя: л

RUN УСПЕШНОГО (общее время: 14s)

+0

Есть ли причина не использовать 'nullptr'? – jready

+0

нет, это только вопрос выбора – 4pie0

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