未在此范围中声明 我回到C++,因为他们想从我这里得到学校,但我遇到了问题。

未在此范围中声明 我回到C++,因为他们想从我这里得到学校,但我遇到了问题。,c++,struct,undeclared-identifier,C++,Struct,Undeclared Identifier,我对struct的定义如下: struct Member{ string Name; string Surname; Member* Next; }; int AddToList(Member* Member, List* List){ Member* Current = new Current; if(List->First == nullptr){ List->First = Member; List-&g

我对struct的定义如下:

struct Member{
    string Name;
    string Surname;
    Member* Next;
};
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;
}
第二种结构:

struct List{
    string Name;
    Member* First;
    int Size;
};
下面我有一个函数:

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;
Member* Current = new Current;
错误:“当前”未在此范围内声明

我尝试如下更改函数:

struct Member{
    string Name;
    string Surname;
    Member* Next;
};
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 = List->First->Next;
Member* Current = new Current;

虽然我觉得这没用,但我只是想试试。我认为函数不知道Member*是什么意思,但是它也会遇到箭头之类的问题,因为它不知道它是由什么组成的。我觉得奇怪的是,只有一行似乎不知道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
}
您需要将这些变量的名称更改为其他名称。C++中的一个常见约定是使用LoeCAMELSE或SNAKEKY变量作为变量名:

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
}

适当的缩进总是好的,但当问题涉及变量范围时,它甚至更好。他们从来没有要求我这样做,所以我学会了在没有缩进的情况下导航,但我没有意识到。使用与类型同名的变量不仅真的令人困惑,而且也是问题的原因。@JiříMatyášis,某些东西是一种要求,是学习它的唯一理由吗?难道阅读代码的容易程度还不足以让我学习正确的缩进吗?老实说,我的室友只是告诉我它应该是什么样子,而我真的无法在这方面导航。我觉得和它一起工作会更好。但我相信它很快就会适得其反:谢谢:)不知道这样会适得其反。