ожидаемый неквалифицированный идентификатор перед «.» токен

#c

#c

Вопрос:

Я читал книгу под названием c для чайников (7-е издание), и в настоящее время я просматриваю главу о классах. Я решил попробовать написать свою собственную программу, используя классы, и это выглядело проще, чем я нашел. У меня возникла эта постоянная проблема («ожидаемый неквалифицированный идентификатор перед «.» токен), которая не исчезла с исправлениями, которые я пробовал. Кажется, этот вопрос зависит от конкретной программы, поэтому я согласен с тем, что он отключается только за то, что он мне полезен. Вот код:

 class savings {
public:
    void Set_Pin(double pin) {
      savings.pin = pin; // this is where the error is
    }
private:
    int pin;
    int username;
};
  

как мне исправить ошибку?
Спасибо

Комментарии:

1. вы должны использовать en.cppreference.com/w/cpp/language/this

2. немного странно, что ваш аргумент имеет то же имя, что и член здесь, если вы изменили свое имя аргумента на p then, вы могли бы просто сделать pin = p; внутри тела вашей функции

3. @EdChum Я бы настоятельно советовал не использовать бессмысленные имена. этого.pin достаточно.

4. Да, savings — это класс, который в какой-то момент будет преобразован в объект в памяти (создан экземпляр). Затем вы можете получить доступ к внутренним элементам этого конкретного экземпляра через указатель this . Так что в этом случае this->pin .

5. Тогда мне, вероятно, следует изменить имена переменных…

Ответ №1:

Вам нужно использовать this , т.е.

изменить

  savings.pin = pin;
  

Для

  this->pin = pin;
  

Комментарии:

1. Является ли «этот» c эквивалентом python «self»

Ответ №2:

«pin» является членом вашего класса, поэтому вам не нужно указывать «saving.pin», поскольку с точки зрения класса «pin» напрямую относится к его члену.

Также я предлагаю вам назвать переменную Set_Pin по-другому, например :

 void Set_Pin(double aPin) {
    pin = aPin; 
}
  

Ответ №3:

Это должно быть:

 void Set_Pin(double pin) {
  this->pin = pin;
}
  

Также это не должно быть необходимо, но из-за того же именования с параметром функции было бы разумно использовать его действительно, более понятным для пользователя.

Также относительно стиля. Я бы использовал начальное имя класса с заглавной буквы.

Комментарии:

1. Моя ошибка, была слишком быстрой с заменой