С++. Почему эти операторы вызывают синтаксическую ошибку? 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).
Answers & Comments
Ответ:
Успіхів!
Объяснение:
1) Перше, що кидається у очі, це 10-й рядок коду, де ти викликаєш НЕстатичну функцію не через екземпляр об'єкта. Вирішити це можна або зробивши функцію adds статичною(скрін 1), тобто static adds (...) {...}, або якщо ти будеш викликати цю функцію через екземпляр об'єкту класа А(скрін 2)
2) Змінна m НЕ є статичною змінною класу А, вона не може бути використана без екземпляра об'єкту (писати треба x.m) => прочитай про статични зміні і в чому їх особливість
3) Якщо ти уж хочеш, щоб твій код працював правильно, треба його змінити(дивись скріни) Функція adds просто створює нову локальну зміну s, в яку КОПІЮЄТЬСЯ значення змінної, переданої аргументом функції adds при виклиці. Потім це значення збільшується, і видаляється з пам'яті. Щоб усе працювало як треба, параметром функції передай вказівник. Тоді в цей вказівний передавай адресу своєї зміної, і через розіменування, збільшуй саме значення цієї зміної(скріншот 3).