2011-10-26 2 views
2

Bonjour, J'ai cherché partout pour résoudre ce problème et j'ai essayé plusieurs façons différentes de définir le ListNode dans le fichier. fichier cpp. Pour une raison quelconque, la structure ne peut pas être partagée avec le fichier .cpp. Toute aide sera grandement appréciée. MerciJe n'arrive pas à comprendre pourquoi le membre privé du fichier d'en-tête ne fonctionne pas dans le fichier cpp

fichier .H:

#ifndef SORTEDLIST_H 
#define SORTEDLIST_H 

#include "Student.h" 

/* 
* SortedList class 
* 
* A SortedList is an ordered collection of Students. The Students are ordered 
* from lowest numbered student ID to highest numbered student ID. 
*/ 
class SortedList { 

    public: 

    SortedList(); 
    // Constructs an empty list. 

bool insert(Student *s); 
// If a student with the same ID is not already in the list, inserts 
// the given student into the list in the appropriate place and returns 
// true. If there is already a student in the list with the same ID 
// then the list is not changed and false is returned. 

Student *find(int studentID); 
// Searches the list for a student with the given student ID. If the 
// student is found, it is returned; if it is not found, NULL is returned. 

Student *remove(int studentID); 
// Searches the list for a student with the given student ID. If the 
// student is found, the student is removed from the list and returned; 
// if no student is found with the given ID, NULL is returned. 
// Note that the Student is NOT deleted - it is returned - however, 
// the removed list node should be deleted. 

void print() const; 
// Prints out the list of students to standard output. The students are 
// printed in order of student ID (from smallest to largest), one per line 

private: 

// Since ListNodes will only be used within the SortedList class, 
// we make it private. 
struct ListNode {  
    Student *student; 
    ListNode *next; 
}; 

ListNode *head; // pointer to first node in the list 
}; 

#endif 

fichier .cpp:

#include <iostream> 
#include "SortedList.h" 

using namespace std; 


SortedList::SortedList() : head(NULL){} 



Student SortedList::*find(int studentID){ 
ListNode *current; 
current = head; 
if(current != NULL){ 
while(current != NULL){ 
       if(current.student.getID() == studentID){ 
       return current.student; 
       } 
current = current.next; 
} 
} 
return NULL;     
} 

ERREURS PERTINENTS: C: \ Users \ Charles \ Desktop \ SortedList.cpp En fonction Student SortedList::* find(int)': 12 C:\Users\Charles\Desktop\SortedList.cpp ListNode » au noir (utilisez d'abord cette fonction)

+0

Est que vraiment la * première * erreur que vous avez obtenu de ce code? Toujours travailler votre chemin à travers les erreurs dans l'ordre. Lorsque le compilateur rencontre une erreur, il fait certaines suppositions sur ce que vous vouliez dire pour continuer à essayer de compiler et vous donner plus de messages d'erreur, mais parfois, les erreurs ultérieures sont juste des effets secondaires d'une mauvaise supposition du compilateur. Si vous commencez à travailler sur des erreurs à partir du milieu de la liste, vous risquez de perdre du temps à essayer de résoudre des problèmes qui ne sont pas vraiment des erreurs. Commencez toujours en haut. –

+1

Ce qui précède est un bon conseil, mais j'ai compilé ce test moi-même (avec une définition stub de Student) et c'était vraiment la première erreur. L'OP a réussi à trouver l'un des canons vraiment * sournois * que C++ fournit dans le but de vous tirer dans le pied. – zwol

+0

Et voici quelques conseils: À l'avenir, quand vous avez un autre problème que vous ne comprenez pas et que vous voulez demander de l'aide, la première chose à faire est de réduire votre code au * plus petit programme possible * qui produit la même erreur. Il est presque toujours possible de le réduire à un fichier et à moins de 20 lignes.Vous pouvez très bien comprendre quel est le problème dans ce processus, et même si vous ne le faites pas, il sera plus facile pour les gens de vous aider. – zwol

Répondre

1

L'erreur de compilation que vous obtenez est en quelque sorte trompeuse; votre problème n'est pas du tout lié au ListNode. Vous avez une erreur de syntaxe dans votre fichier cpp:

Student *SortedList::find(int studentID) 

Cela signifie que SortedList::find renvoie un pointeur à un étudiant.

+0

Ce n'est techniquement pas une erreur de syntaxe, mais une déclaration de la mauvaise fonction. – zwol

0

La signature correcte est:

Student* SortedList::find(int studentID) 

Le pointeur fait partie du type de retour et ne fait pas partie du nom de la méthode.

+0

Merci pour la réponse rapide – chazzwa

2

Cette ligne est faux:

Student SortedList::*find(int studentID) { 

Vous mettez l'étoile au mauvais endroit. C'est pas le préambule de la définition de SortedList::find, en retournant un Student*. Ceci est le préambule de la définition d'une fonction libre nommée find, qui renvoie un Student SortedList::*. (Un type «pointeur-à-membre» inhabituel, mais bien formé). Parce que ce n'est pas une méthode membre SortedList, aucune des déclarations internes de SortedList sont dans la portée, et c'est pourquoi vous obtenez ce message d'erreur confus.

C'est ce que vous devriez avoir écrit: (. Découper en trois lignes, comme ce n'est pas nécessaire, mais il sera plus facile pour d'autres personnes de votre code)

Student * 
SortedList::find(int studentID) 
{ 

Questions connexes