Предмет: Информатика, автор: pomidorkasvezhaya

С++. Почему эти операторы вызывают синтаксическую ошибку?
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

Ответ:

Успіхів!

Объяснение:

1) Перше, що кидається у очі, це 10-й рядок коду, де ти викликаєш НЕстатичну функцію не через екземпляр об'єкта. Вирішити це можна або зробивши функцію adds статичною(скрін 1), тобто static adds (...) {...}, або якщо ти будеш викликати цю функцію через екземпляр об'єкту класа А(скрін 2)

2)  Змінна m НЕ є статичною змінною класу А, вона не може бути використана без екземпляра об'єкту (писати треба x.m) => прочитай про статични зміні і в чому їх особливість

3) Якщо ти уж хочеш, щоб твій код працював правильно, треба його змінити(дивись скріни) Функція adds просто створює нову локальну зміну s, в яку КОПІЮЄТЬСЯ значення змінної, переданої аргументом функції adds при виклиці. Потім це значення збільшується, і видаляється з пам'яті. Щоб усе працювало як треба, параметром функції передай вказівник. Тоді в цей вказівний передавай адресу своєї зміної, і через розіменування, збільшуй саме значення цієї зміної(скріншот 3).

Приложения:

pomidorkasvezhaya: Спасибо большое!
Интересные вопросы
Предмет: Физика, автор: denis02706081
Предмет: Алгебра, автор: albertgaltsov4