2017-10-02 5 views
-1

나는 학교에서 저에게 그것을 원하기 때문에 C++로 돌아가고 있지만 문제가 발생했습니다. 내가하는 기능이 있었다 아래보다는이 범위에서 선언되지 않았습니다

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

:

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

, 2 차 구조 :

는이 같은 구조체를 정의

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; 
} 

을하지만 라인보다 오류 :

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

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

내가 이런 기능 변경 시도 :

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; 
} 

을하지만 난 그냥 줄에 같은 오류가 발생합니다 :

Member* Current = new Current; 

나는이 도움이되지 않습니다 불구하고 있지만하지만, 나는 단지 시험하고 싶었다. 기능은 회원이 무엇을 의미하는지 알지 못했지만 그것이 무엇을 만들 었는지 알지 못하기 때문에 화살과 물건에 문제가있을 것입니다. 1 줄이 Member *가 무엇인지 알지 못하는 것보다 나에게 이상한 것 같습니다. 당신은 뭔가 다른 이들 변수의 이름을 변경해야

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 
} 

:

+10

적절한 들여 쓰기는 항상 좋은 그러나 문제는 변수 범위 지정에 관한 더 나은 경우. – Borgleader

+0

글쎄 그들은 그것을하지 않아도되는 것을 배웠을 때 그렇게하지 않을 것을 결코 깨닫지 못했다. –

+2

형식과 이름이 같은 변수를 사용하는 것은 혼란뿐만 아니라 문제의 원인이기도합니다. – Kevin

답변

3

당신은 자신의 유형과 같은 이름을 가진 변수가 있습니다. C++에서 일반적인 규칙은 변수 이름을 lowerCamelCase 또는 snake_case을 사용하는 것입니다

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

고맙습니다. 이것보다 더 역효과가 나는지 몰랐습니다. –