Как получить доступ к переменным функции внутри main? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть программа, которая использует 3 отдельных файла, файл заголовка для объявлений функций, файл cpp для определений и файл основного драйвера для вызова функций. Для моих определений функций внутри этих функций создаются переменные, которые я sh буду использовать в качестве параметров для другой функции , вызываемой в main. Я смущаюсь, просто пытаюсь выразить это словами, ниже приведен пример.

Файл заголовка

void function01(char);
void function02(int, int, char);

Cpp Файл

void function01(char a){

    int var01 = 3;
    int var02 = 4;
    int var03 = 8;
    char a = 'a';
}

void function02(int num1, int num2, int num3){
    int sum = num1 + num2 + num3;    
}   

Основной файл

int main (void){

    function02(var01, var02, var03);


return 0;
}

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

1 Ответ

1 голос
/ 26 февраля 2020

Как получить доступ к переменным функции внутри main?

невозможно получить доступ к локальным переменным функции non-stati c в область, в которой эта функция вызывается. Эти переменные существуют только во время выполнения функции. Объекты, названные переменными, создаются при вызове функции и уничтожаются до ее возврата.

function01 в настоящее время совершенно бесполезен, поскольку не имеет никаких эффектов, наблюдаемых снаружи функции, а также это вернуть что-нибудь. После вызова функции состояние программы будет точно таким же, как если бы вы не вызывали функцию. Функция также ничего не делает со своим аргументом.

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

struct my_example_class {
    int var01;
    int var02;
    int var03;
    char a;
};

my_example_class
function01(){
    return {3, 4, 8, 'a'};
}

Затем вызвать другую функцию и использовать возвращенные объекты-члены в качестве аргументов другой функции:

auto r = function01();
function02(r.var01, r.var02, r.var03);
...