C++ Liste Doublement Chaînée Programme

J'ai essayé de m'enseigner la programmation depuis quelques mois maintenant, je l'ai acheté à propos de trois livres et regardé une tonne de vidéos sur YouTube qui a été très bien jusqu'à présent. Mais la semaine dernière, ou alors j'ai été perplexe grâce à des listes liées! Je reçois l'ensemble du concept, mais la syntaxe est en train de me tuer! J'ai écrit quelques très simple des listes liées à des programmes d'exercice, mais maintenant je suis en train d'écrire un programme où je charge quelques informations à partir d'un fichier (informations de personnes qui ont fait une demande de visa) sur un lien d'une liste, il vous suffit d'afficher l'ensemble du lot de nouveau(une fois que c'est fait j'ai l'intention de l'étendre à d'où je afficher seulement certains nœuds et de retirer certaines des nœuds, mais je ne vais pas rentrer dans les détails). J'espère que le code ci-dessous n'est pas trop longue et si seulement je pouvais obtenir quelques conseils (no pun intended) ou certains fragments de code pour m'aider à comprendre ce qui se serait génial!

p.s une partie de ce code est à partir d'un exemple similaire dans un livre.

ici est le principal(en plus)avec la boucle à la charge de l'information(il ne fonctionne pas)

 List myList;
 visa_application *visa;

 Node * pNode;

 string visa_type;//these are all the variables that i want to load from the file
 int invoice_no;
 string surname;
 string firstname;
 double contact;
 string status;
 string result; 

ifstream in;
in.open("applications.txt",ios::in);



      while (!in.eof()){     
         pNode = new Node;
         visa = new visa_application;    //allocate memory for nodes

         in >> visa-> visa_type >> visa->invoice_no >>  visa-> surname;
         in >> visa-> firstname >> visa-> contact >> visa-> status >>  visa-> result ; 

         pNode->nData = &visa;   //put some data in the node
         myList.appendNode(pNode); //add node to list

         }

Voici mon nœud de la classe fichier d'en-tête

 class Node
{
      friend class List;
      private:
              node_data * nData;
              Node *pNext;
              Node *pPrev;
      public:
              Node  (node_data * data){nData = data;
                                    pNext = NULL;
                                   pPrev = NULL;}
             node_data * getData(){return nData;}
};

voici la liste des cours fichier d'en-tête

class List
{
private:
Node *pHead;
Node *pTail;
Node  *createNode(node_data * data);
public:
List ();
~List();
Node  *getpHead (){ return pHead;}
Node  *getpTail (){return pTail;}
Node  *previousNode(Node  *pNode){return pNode->pPrev;}
Node  *nextNode (Node  *pNode){return pNode->pNext;}
void appendNode(node_data * value);
void insertNode(node_data * value, Node  *pAfter);
void removeNode(Node  *pNode);
bool isEmpty();
void printList(); 
};
List ::List() {
pHead=NULL;
pTail=NULL;
}
List ::~List(){
while (!isEmpty())   //keep on removing until the
//head points to NULL
removeNode(pHead);
cout << "List deleted\n";
}
Node * List::createNode(node_data * data){
Node * pNode = new Node (data); //allocate memory for new node and
//intialize value to data
return pNode;  
}
bool List ::isEmpty(){
return pHead == NULL;
}
void List ::appendNode(node_data * value)
{
Node * pNode = createNode(value);
if (isEmpty()) {     //if list is empty
pHead = pNode;        //make head point to pNode
pNode->pPrev = NULL;
}
else {                    //otherwise
pTail->pNext = pNode;  //make tail point to pNode
pNode->pPrev = pTail;
}
pTail = pNode;        //tail is now pNode
pNode->pNext = NULL;  //pNode next now points to NULL
}
void List ::insertNode(node_data * value, Node  *pAfter)
{
Node *pNode =  createNode(value);
pNode->pNext = pAfter->pNext;
pNode->pPrev = pAfter;
if (pAfter->pNext != NULL)
pAfter->pNext->pPrev = pNode;
else
pTail = pNode;
pAfter->pNext = pNode;
}
void List ::removeNode(Node  *pNode)
{
if (pNode->pPrev == NULL)  //if removing the head
pHead = pNode->pNext;
else
pNode->pPrev->pNext = pNode->pNext;  //if removing a middle node
if (pNode->pNext == NULL)  //if removing the tail
pTail = pNode->pPrev;
else
pNode->pNext->pPrev = pNode->pPrev;
pNode = NULL;
delete pNode;  //*free the memory
}
void List ::printList()
{
Node  *pNode=pHead;
if (isEmpty())
cout << "The list is empty\n";
else
for (pNode = pHead; pNode != NULL; pNode = pNode->pNext)
pNode->nData->print();
}

Ma classe de demande de visa fichier d'en-tête

class visa_application
{
public:
//class constructor
visa_application();
//class destructor
~visa_application();
private:
string visa_type;
int invoice_no;
string surname;
string firstname;
double contact;
string status;
string result;     
};

et enfin le visa application.cpp

     visa_application::visa_application()
{
string visa_type = none;
int invoice_no = 0;
string surname = none;
string firstname = none;
double contact = 00;
string status = none;
string result = none; 
}
class destructor
visa_application::~visa_application()
{
//insert your code here
}  

J'obtiens le message d'erreur "no matching function for call to `Liste::appendNode(Noeud*&)'" parmi quelques autres choses.De toute façon je sais que c'est long, mais ce serait génial si je pouvais obtenir de l'aide, je n'ai pas de tuteur ou un professeur ou quelqu'un comme ça pour m'aider afin que tous les commentaires seront très appréciés! Merci!

**MODIFIER les messages d'erreur sont:

 no matching function for call to `Node::Node()' 
candidates are: Node::Node(const Node&) 
Node::Node(node_data*)     
no matching function for call to `List::appendNode(Node*&)' 
candidates are: void List::appendNode(node_data*)   
  • while (!in.eof()){pNode = new Node; Je pense que vous ne le supprimez pas pNode données ici afin que votre programme est une fuite de mémoire...Pas une solution, mais son bon de savoir. Edit: en va de même pour visa
  • Lorsque vous ne pNode->nData = &visa; vous définissez la nData membre de pointeur vers un pointeur vers un visa_application, ce n'est probablement pas ce que vous voulez.
  • Aussi, merci de poster la version complète et non censurée journal des messages d'erreur. Et où dans la posté source les erreurs sont.
  • pNode = NULL;delete pNode; //*free the memory Vous êtes invalide et puis la suppression de pas de mémoire...Vous devriez avoir ces autres sens. Pour être honnête, vous avez votre programme de fuite de mémoire dans tous les sens. Je sais que c'est pas le point de la question, mais je pense que vous devriez revenir sur des poiners et de la gestion de la mémoire allouée dynamiquement. Pour résumer: rien dans le code (en gros) est supprimé.
  • Et ce qui sur terre est node_data? Il n'y a aucune mention de ce class/struct/typedef dans votre programme.
InformationsquelleAutor user2710184 | 2013-10-21