访问void函数中的变量以用于其他函数?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();
}

您可以通过引用调用使其成为一个参数。

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

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

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

并且在函数中更新输出变量

*output = d_nr;

您可以为函数再添加一个参数。例如

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

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

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

问题是函数需要特定的签名,但您需要其他信息吗?

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

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

你能更详细地说明你想做什么吗?假设不存在线程问题,那么静态变量可能是最好的。

从技术上讲,如果您自己不在函数的作用域内,则无法访问该作用域内声明的变量。您有两种选择可以在其范围之外访问该值,即:

  1. 在离开作用域之前(在这种情况下,在函数结束之前)将其值复制到其他变量。或者
  2. 声明一个范围更大的变量,并在函数中使用它

使用第一种方法的方法包括返回值,或将值复制到全局-如下所示:

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...
}

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

最新更新