#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. Моя ошибка, была слишком быстрой с заменой