2017-10-02 4 views
-1

Je reviens à C++ parce qu'ils le veulent de moi pour l'école mais j'ai rencontré un problème.n'a pas été déclaré dans cette portée

I défini struct comme ceci:

struct Member{ 
    string Name; 
    string Surname; 
    Member* Next; 
}; 

et 2ème structure:

struct List{ 
    string Name; 
    Member* First; 
    int Size; 
}; 

que ci-dessous j'avais une fonction:

int AddToList(Member* Member, List* List){ 
    if(List->First == nullptr){ 
     List->First = Member; 
     List->First->Next = nullptr; 
     return 1; 
    } 
    Member* Current = List->First->Next; 
    while(Current != nullptr){ 
     Current = Current->Next; 
    } 
    Current = Member; 
    Current->Next = nullptr; 
    return 2; 
} 

Mais je reçois une erreur que la ligne :

Member* Current = List->First->Next; 

error: 'Current' was not declared in this scope.

J'ai essayé de changer la fonction comme ceci:

int AddToList(Member* Member, List* List){ 
    Member* Current = new Current; 
    if(List->First == nullptr){ 
     List->First = Member; 
     List->First->Next = nullptr; 
     return 1; 
    } 
    Current = List->First->Next; 
    while(Current != nullptr){ 
     Current = Current->Next; 
    } 
    Current = Member; 
    Current->Next = nullptr; 
    return 2; 
} 

Mais je reçois la même erreur que sur la ligne:

Member* Current = new Current; 

Bien que je pensais que ce ne sera pas aidé, mais Je voulais juste essayer. Je pensais que la fonction n'était pas consciente de ce que le membre * voulait dire mais qu'elle aurait aussi des problèmes avec les flèches et autres choses, car elle ne saurait pas de quoi il s'agit. Cela me semble bizarre que seulement 1 ligne semble ne pas savoir ce qu'est le membre *.

+10

indentation correcte est toujours bonne, mais encore mieux quand la question a trait à la portée des variables. – Borgleader

+0

Eh bien, ils ne m'ont jamais demandé de le faire, alors j'ai appris à naviguer sans elle, je ne m'en suis pas rendu compte. –

+2

Avoir des variables avec les mêmes noms que les types est non seulement vraiment déroutant, mais aussi la raison de vos problèmes. – Kevin

Répondre

3

Vous avez des variables avec les mêmes noms que leurs types:

int AddToList(Member* Member, List* List) { 
    // Member and List are the parameters, *not* the types 
    ... 
    Member* Current = List->First->Next; // syntax error, Member is a variable 
} 

Vous devez changer le nom de ces variables à autre chose. Une convention commune en C++ est d'utiliser soit lowerCamelCase ou snake_case pour les noms de variables:

int AddToList(Member* member, List* list) { 
    // Member and List are the types 
    // member and list are the parameters 
    ... 
    Member* current = list->first->next; // Works now 
} 
+0

Merci :) Je ne sais pas que cela peut se retourner comme ça. –