2015-02-11 233 views
-2

有人可以请解释如何将一个函数中的变量的值带入另一个函数。我知道,只要函数结束,函数中的变量值就会被清除。但我怎么告诉它不要这样做。如何将变量的值从一个函数带到另一个函数?

我正在尝试将候选函数中的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

查看返回值和参考变量。 [在你学习的时候,这个网站应该会有很多帮助!](http://www.learncpp.com/) – Conduit 2015-02-11 21:09:13

+1

你应该看看如何将**参数**传递给函数并使用**返回**值。 – CoryKramer 2015-02-11 21:09:15

+0

'void candidates(int&ppl)'和'void votes(int const ppl)' – 101010 2015-02-11 21:10:49

回答

0

使用return

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

功能考生()现在收到的int所以现在你可以这样做:

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

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

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个问题。

+0

为什么你会用指针指向'string'的指针呢? – juanchopanza 2015-02-11 21:35:29

+0

@juanchopanza:固定。我试图解决的主要问题是,无论答案是什么,它都没有什么价值。还有一个比“不理解参数”*更直接的问题,即*“缺乏有组织的学习方法”*。 – 2015-02-11 21:40:03

相关问题