2016-11-19 11 views
-2

このコードは実行時にのみエラーが発生し、 "セグメンテーションエラー"です。どのようにこれに取り組むことができますか?このエラーを取り除く方法はわかりません。前もって感謝します!上のすべての警告と毎回セグメンテーションフォールトが発生するのはなぜですか?

#include <iostream> 
#include <cstddef> 

using namespace std; 

class Node 
{ 
    private: 
     int  data; 
     Node* nextNodeAddress; 

    public: 
     Node(): nextNodeAddress(NULL) {} // if next node is not used it must be null. 

     void setData(int); // this function sets data in the node 
     int  retrieveData(); // this function retrieves the data from the node 
}; 

void Node::setData(int data) 
{ this->data=data; } 

class List 
{ 
    private: 
     Node* headNode; 
     Node* currentNode; 
     int listSize; 
    public: 
     List(); 
     void addNode(int); 
     void deleteNode(int); 
}; 

List::List(): headNode(NULL),currentNode(NULL) 
{ 

} 

void List::addNode(int data) 
{ 
    Node* newNode = NULL; 
    newNode->setData(data); 
    newNode->setNextNode(NULL); 
    if(headNode==NULL) 
     headNode = newNode; 
    else 
     currentNode->setNextNode(newNode); 
    currentNode = newNode; 
    this->listSize++; 
} 

答えて

0

GCCはこれをスロー:

In member function ‘void Node::setData(int)’: 
18:28: warning: declaration of ‘data’ shadows a member of 'this' [-Wshadow] 
void Node::setData(int data) 

はチェックを開始するには良い場所である可能性があります。

編集:問題がhere議論され、基本的には、メソッドのパラメータとしてクラス定義でprivate intint dataの両方に名前dataを再利用しています。あなたはどのようなときにそれを決めることができますかthis->data = data

関連する問題