Как в main() получить значение из статической переменной внутри другой функции?

Я хочу получить значение main() из functionTwo().
functionOne предназначен для вычисления суммы functionTwo().

Почему я не могу использовать это предложение для передачи значения j в int b?

int b  = functionOne();
 //function 0ne
int functionOne(int x) {
    static int j = 0;
    j = j + x;
    return j;
}

//function Two
void functionTwo() {
    int a = 10;
    for (int i = 0; i < a; i++) {
        functionOne(2);
    }
}

// print the j value of functionOne in main()
int main()
{
    functionTwo();

    //Why I cannot use this sentence to pass the j value to "int b"?
    int b = functionOne();

    cout << "the j value of functionOne in main() is: " << functionOne << endl;
    return 0;
}

Что происходит, когда вы пытаетесь? Возможно, вы получаете ошибку? Если да, то добавьте его к вопросу.

TheUndeadFish 22.12.2020 09:12

Потому что C++ работает иначе? Возможно, вы ищете классы, переменные-члены и геттеры? Пожалуйста, инвестируйте в несколько хороших книг по C++ и пройдите пару курсов, чтобы правильно изучить C++.

Some programmer dude 22.12.2020 09:14
functionTwo не вычисляет сумму - он просто вызывает functionOne, где происходит сложение, многократно - и functionOne принимает целочисленный параметр. Функция не имеет значения «сама по себе», что, похоже, вы предполагаете.
molbdnilo 22.12.2020 09:15

Почему бы не сделать все как обычно? Если вы хотите, чтобы функция возвращала значение, используйте return из этой функции, не сохраняйте возвращаемое значение в статической переменной для возврата другой функцией. Вы просто излишне усложняете себе задачу.

john 22.12.2020 09:19

@john Это похоже на решение, основанное на более фундаментальном изменении более чистого дизайна, а не на предложенном мной быстром исправлении. Я был бы рад проголосовать за соответствующий ответ. Или, может быть, подумайте о том, чтобы позволить (другим или мне) превратить ваш комментарий в ответ для вас.

Yunnosch 22.12.2020 09:32

@Yunnosch Я пробовал много способов, чтобы дать вам голос, но система отклонила мой голос. Я не знаю почему.

ashur 22.12.2020 09:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этому int functionOne(int x) нужен параметр. Вот почему вы не можете получить его так, как пытались.

Нет чистого способа сделать это, нет предполагаемого способа получить значение из статической переменной внутри функции. Вы возвращаете ее, но вызов функции, очевидно, имеет побочный эффект для статической переменной, что, конечно же, является целью этой и практически любой другой статической переменной в любой функции.

В этом особом случае вы можете получить значение, но не влиять на значение статических переменных, путем

int b = functionOne(0);

Для более общего решения (для случаев, когда любое значение параметра имеет нежелательные побочные эффекты) вам следует изучить концепцию классов в C++. Это позволяет создавать объекты, которые имеют аналогичное внутреннее значение, но также позволяют считывать их явно, без побочных эффектов, с помощью методов "геттера". (Подробности об этом уже упоминались в комментарии Джона к вашему вопросу, надеюсь, они не возражают.)

@Someprogrammerdude Мой ответ (редактирование) совпадает с вашим комментарием, но не основан на нем (прочитайте позже ...). Но я предполагаю, что вы были бы не против, даже если бы это было так. Я упоминаю об этом, потому что боюсь, что за это проголосовали против...

Yunnosch 22.12.2020 09:30

Я пытаюсь проголосовать за, но система отклонила мой голос, и я не знаю, почему есть отрицательный голос. Ваш ответ именно то, что я хочу.

ashur 22.12.2020 09:34

Когда я нажимаю один раз, он показывает «ноль голосов за». Когда я нажимаю два раза, он показывает «-1 голос за (против)». И когда я нажимаю три раза, он снова показывает «ноль голосов». Но я хочу дать вам "+ 1 плюс".

ashur 22.12.2020 09:45

Теперь вы получили желаемый результат. Но, как правило, вы можете увеличить оценку только на единицу, а не установить для нее значение. Кто-то еще проголосовал против (на что они имеют право, даже анонимно), и теперь другой пользователь проголосовал вместе с вами, в общей сложности 1. Не волнуйтесь.

Yunnosch 22.12.2020 09:47

Другие вопросы по теме