Я хочу получить значение 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;
}
Потому что C++ работает иначе? Возможно, вы ищете классы, переменные-члены и геттеры? Пожалуйста, инвестируйте в несколько хороших книг по C++ и пройдите пару курсов, чтобы правильно изучить C++.
functionTwo
не вычисляет сумму - он просто вызывает functionOne
, где происходит сложение, многократно - и functionOne
принимает целочисленный параметр. Функция не имеет значения «сама по себе», что, похоже, вы предполагаете.
Почему бы не сделать все как обычно? Если вы хотите, чтобы функция возвращала значение, используйте return
из этой функции, не сохраняйте возвращаемое значение в статической переменной для возврата другой функцией. Вы просто излишне усложняете себе задачу.
@john Это похоже на решение, основанное на более фундаментальном изменении более чистого дизайна, а не на предложенном мной быстром исправлении. Я был бы рад проголосовать за соответствующий ответ. Или, может быть, подумайте о том, чтобы позволить (другим или мне) превратить ваш комментарий в ответ для вас.
@Yunnosch Я пробовал много способов, чтобы дать вам голос, но система отклонила мой голос. Я не знаю почему.
Этому int functionOne(int x)
нужен параметр. Вот почему вы не можете получить его так, как пытались.
Нет чистого способа сделать это, нет предполагаемого способа получить значение из статической переменной внутри функции. Вы возвращаете ее, но вызов функции, очевидно, имеет побочный эффект для статической переменной, что, конечно же, является целью этой и практически любой другой статической переменной в любой функции.
В этом особом случае вы можете получить значение, но не влиять на значение статических переменных, путем
int b = functionOne(0);
Для более общего решения (для случаев, когда любое значение параметра имеет нежелательные побочные эффекты) вам следует изучить концепцию классов в C++. Это позволяет создавать объекты, которые имеют аналогичное внутреннее значение, но также позволяют считывать их явно, без побочных эффектов, с помощью методов "геттера". (Подробности об этом уже упоминались в комментарии Джона к вашему вопросу, надеюсь, они не возражают.)
@Someprogrammerdude Мой ответ (редактирование) совпадает с вашим комментарием, но не основан на нем (прочитайте позже ...). Но я предполагаю, что вы были бы не против, даже если бы это было так. Я упоминаю об этом, потому что боюсь, что за это проголосовали против...
Я пытаюсь проголосовать за, но система отклонила мой голос, и я не знаю, почему есть отрицательный голос. Ваш ответ именно то, что я хочу.
Когда я нажимаю один раз, он показывает «ноль голосов за». Когда я нажимаю два раза, он показывает «-1 голос за (против)». И когда я нажимаю три раза, он снова показывает «ноль голосов». Но я хочу дать вам "+ 1 плюс".
Теперь вы получили желаемый результат. Но, как правило, вы можете увеличить оценку только на единицу, а не установить для нее значение. Кто-то еще проголосовал против (на что они имеют право, даже анонимно), и теперь другой пользователь проголосовал вместе с вами, в общей сложности 1. Не волнуйтесь.
Что происходит, когда вы пытаетесь? Возможно, вы получаете ошибку? Если да, то добавьте его к вопросу.