如何将变量的值从一个函数带到另一个函数?

时间:2015-02-11 21:06:57

标签: c++ function variables dynamic

有人可以解释如何将一个函数中的变量值传递给另一个函数。我知道,一旦函数结束,函数中的变量值就被清除掉了。但是我怎么告诉它不要这样做。

我试图将候选函数中的int ppl;值带入投票函数。但正如你所看到的那样,它不会独自完成。

void candidates()
{           
    int ppl;
    cout << "Hello please how many candidates are there?: ";
    std::cin >> ppl;
    string *cans = new string[ppl];
    for (int i = 0; i < ppl; i++)
    {
        cout << "Please type in the last name of candidate number: " << i + 1 << endl;
        cin >> cans[i];cout  << endl << endl;
    }

    for (int a = 0; a < ppl; a++)
    {
        cout << cans[a] << endl << endl;
    }
}

void votes()
{               
    int *vote = new int[ppl];

    // ...
}

2 个答案:

答案 0 :(得分:1)

您想要的模式可能是:

std::vector<string> gather_data() {...}

void use_data( std::vector<string> data ) { ... }

然后你可以这样做:

auto data = gather_data();
use_data( data );

更好的做法是确保use_data不能修改其参数,并且此参数通过引用传递。所以:

void use_data( const std::vector<string>& data ) { ... }

更高级的模式是使用类:

class Foo {
    std::vector<string> data;
public:
    void gather() {...}
    void use() {...}
}

Foo myFoo;
myFoo.gather();
myFoo.use();

在这种情况下,您可以看到Foo的实例方法可以访问其data

你当然不希望在没有充分理由的情况下使用全局变量。

但是,如果您在此基本级别提出问题,则表示您需要read a book

你会发现,通过提问来尝试学习什么是最困难的语言是不切实际的。每个答案都会提出10个问题。

答案 1 :(得分:0)

使用return

int candidates()
{
    int ppl;
    std::cin >> ppl;
    ...
    return ppl;
}

函数候选者()现在收到int所以现在你可以这样做:

void votes()
{
    int *vote = new int[candidates()];
}

您还可以使用全局变量,或将变量ppl作为int&传递给函数candidates()作为参数,因此必须从函数中创建ppl(让我们说在主要功能中),因此它可用于您需要的每个功能。