有人可以解释如何将一个函数中的变量值传递给另一个函数。我知道,一旦函数结束,函数中的变量值就被清除掉了。但是我怎么告诉它不要这样做。
我试图将候选函数中的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];
// ...
}
答案 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
(让我们说在主要功能中),因此它可用于您需要的每个功能。