在这方面没有申明

时间:2017-10-02 15:21:38

标签: c++ struct undeclared-identifier

我回到c ++是因为他们希望我能在学校学习,但我遇到了问题。

我定义了这样的结构:

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

和第二结构:

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;
  

错误:'当前'未在此范围内宣布。

我试图改变这样的功能:

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行似乎不知道会员*是什么。

1 个答案:

答案 0 :(得分:3)

您的变量名称与其类型相同:

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 ++中的一个常见约定是使用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
}