【问题标题】:How do I bring a variable's value from one function to another?如何将变量的值从一个函数带到另一个函数?
【发布时间】:2015-04-12 10:08:57
【问题描述】:

谁能解释一下如何将一个函数中的变量的值带到另一个函数中。我知道一旦函数结束,函数中的变量值就会被清除。但是我如何告诉它不要那样做。

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

    // ...
}

【问题讨论】:

标签: c++ function variables dynamic


【解决方案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 个问题。

【讨论】:

  • @juanchopanza:已修复。我要解决的主要问题是,无论答案是什么,它都没有什么价值。还有一个比“不理解参数”更直接的问题,即“缺乏结构化的学习方法”
【解决方案2】:

使用return

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

函数 Candidate() 现在收到 int 所以现在你可以这样做了:

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

您也可以使用全局变量,或者将变量ppl 作为int&amp; 传递给函数candidates() 作为参数,所以ppl 必须在函数之外创建(比如说在主函数中),因此它适用于您需要的所有功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多