访问void函数中的变量以用于其他函数? C ++

时间:2014-02-13 17:28:40

标签: c++

是否可以访问此函数之外的d_nr变量而不返回它,我该怎么做?我想保持返回值无效。

不确定此代码是否有任何帮助,但这是有问题的功能。我不想在不返回它的情况下访问此函数之外的d_nr变量。

void read(data & P, string file_name)
{
    int d_nr = 0, i = 0;
    string line;
    ifstream D(file_name);
    while(getline(D, line))
    {
        istringstream iss (line); 
        iss >> P.string[d_nr];
        while(iss.good())
        {
            iss >> P.var_1[i][d_nr] >> P.var_2[i][d_nr];
            i++;
        }
        d_nr++;
        i = 0;
    }
    D.close();
}

5 个答案:

答案 0 :(得分:1)

您可以将其作为参考调用的参数。

void read(data & P, string file_name, int &d_nr)
{
    d_nr = 0;
    ...

答案 1 :(得分:0)

您可以将指针传递给外部变量

void read(data & P, string file_name, int *output)

并在函数中更新输出变量

*output = d_nr;

答案 2 :(得分:0)

您可以为该功能添加一个参数。例如

void read(data & P, string file_name, int &d_nr )
{
    d_nr = 0;
//...

或者,如果数据是某个类,那么您可以简单地向该类添加一个数据成员。例如

void read(data & P, string file_name )
{
    P.d_nr = 0;
//...

答案 3 :(得分:0)

问题是该功能需要特定签名,但您需要其他信息吗?

究竟什么需要“访问”?我们有什么样的线程/流程期望?

如果没有多线程,一个简单的全局变量就可以工作。您可以考虑将值打印到stdout(这可能是一个坏主意,但我不知道上下文和要求是什么,所以它可能是您想要的。)或者,另一个相关的想法可能很糟糕但是很难如果没有更详细的说明你正在做什么 - 你可以把它写到文件中。

您能更详细地了解您的目标吗?假设没有线程问题,可能静态变量最好。

答案 4 :(得分:0)

从技术上讲,如果您自己不在该范围内,则无法访问在函数的范围中声明的变量。您可以在其范围之外访问该值的两个选项是:

  1. 在离开范围之前(在此情况下,在函数结束之前)将其值复制到其他变量。或...
  2. 声明具有更大范围的变量,并在函数中使用该变量。
  3. 使用第一种方法执行此操作的方法包括返回值或将值复制到全局 - 如下所示:

    int global_dnr = 0;
    void read(data & P, string file_name) {
        int d_nr = 0, i = 0;
        // The rest of your code as is...
        global_dnr = d_nr;
    }
    

    现在您可以随时访问global_dnr,它应该具有最新的d_nr值。如果您的read函数是类方法,您也可以将d_nr分配给类变量。

    对于方法2,你根本不在函数中声明d_nr - 你可以声明一个全局变量,通过引用传递一个变量作为参数(虽然这在技术上等同于返回变量)或者直接访问类成员。以下是使用全局变量的示例:

    int d_nr = 0; // Here is the global declaration instead.
    void read(data & P, string file_name) {
        d_nr = 0; // Set variable to 0, but don't declare it here.
        // The rest of your code as is...
    }
    

    这是你的两个选择。只有实施细节有所不同。