С++. Почему эти операторы вызывают синтаксическую ошибку?
class A {
public:
static int k;
int m = 3;
void adds(int s) const { s++; }
};
int A::k = 0;
void main() {
A x;
A::adds(A::k); //ошибка
A::adds(A::m); //ошибка
x.adds(x.k);
}
Ответы
Ответ:
Успіхів!
Объяснение:
1) Перше, що кидається у очі, це 10-й рядок коду, де ти викликаєш НЕстатичну функцію не через екземпляр об'єкта. Вирішити це можна або зробивши функцію adds статичною(скрін 1), тобто static adds (...) {...}, або якщо ти будеш викликати цю функцію через екземпляр об'єкту класа А(скрін 2)
2) Змінна m НЕ є статичною змінною класу А, вона не може бути використана без екземпляра об'єкту (писати треба x.m) => прочитай про статични зміні і в чому їх особливість
3) Якщо ти уж хочеш, щоб твій код працював правильно, треба його змінити(дивись скріни) Функція adds просто створює нову локальну зміну s, в яку КОПІЮЄТЬСЯ значення змінної, переданої аргументом функції adds при виклиці. Потім це значення збільшується, і видаляється з пам'яті. Щоб усе працювало як треба, параметром функції передай вказівник. Тоді в цей вказівний передавай адресу своєї зміної, і через розіменування, збільшуй саме значення цієї зміної(скріншот 3).


