私は現在、2 つの名前、ID 番号を格納し、次の機能を持つノード クラスの次のコードを持っています。
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->Next を呼び出そうとすると、このコードの実行に失敗します。これにより、ノードを正しく構築していないと信じるようになります。私のコードで何が間違っている可能性があるかについてのアイデアはありますか?
リンクされたリストは、上で投稿したノード クラスを使用する別のクラスです。
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 クラスの PrintList() 関数は、list->printNode() (cout << IDnumber 行にブレークがある) のときに失敗し、list = list->Next 行でも失敗します。
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;
}