簡體   English   中英

從其他函數訪問變量c ++

[英]access variables from other function c++

我必須訪問在其他函數中聲明的變量。

假設f1()

void f1()
{
  double a;
  int b;
  //some operations
}

f2()

void f2()
{
  //some operations
  //access a and b from f1()
}

在C ++中是possilbe嗎? 那怎么辦?

提到過如圖所示的功能這里不是我的情況適合的答案,因為這會破壞調用函數的順序。 聲明全局變量也被拒絕。

在C ++中,無法訪問超出該函數范圍的本地聲明的函數變量。 簡而言之,您在這里的要求是什么:

我必須訪問在另一個函數中聲明的變量。

根本不可能。 任何嘗試, 似乎讓你做這是不確定的行為。

您可以做的是將“ f1”和“ f2”設置為類的方法,並將double aint b為成員數據狀態:

class c1
{
  double a;
  int b;

public:
  void f1();
  void f2();
};

void c1::f1()
{
  // f1 can access a and b.
  //some operations
}

void c1::f2()
{
  // f2 can see the changes made to a and b by f1
}

這滿足您的兩個要求。 即:

  1. 沒有使用全局變量。
  2. 沒有參數引用傳遞到所討論的方法中。

聽起來您想從f1之外的其他地方調用f2 ,例如

void foo() { f1(); f2(); }

如果是這樣的話:在調用f2這些變量甚至都不存在,因此沒有訪問權限。
(而且您誤以為是一生的 范圍 。那是完全不同的事情。)

可以做的一件事是通過將變量傳遞給需要它們的所有函數。

void f1(double& a, int& b);
void f2(double& a, int& b);

void foo()
{
    double x;
    int y;
    f1(x, y);
    f2(x, y);
}

您可以執行的操作與greatwolf建議的操作類似。 您可以在函數內使用類聲明。 這具有以下目的:可以定義一個僅在當前作用域中可用的函數,以便在該作用域之外無法訪問,並且該函數可以訪問該作用域中的變量,就好像它們是全局變量一樣。 該類也僅在您當前的作用域中定義。

void    MyVeryComplicatedFunction
{
    int A;
    class localvars
    {
    public:
        int *ARef;              // this serves as the "Global" variables
        std::vector<int>    B;  // this serves as the "Global" variables

        localvars(int *inA) ARef(inA);

        void RepetativeOperation(int C) {
            (*ARef) += C;
            B.push_back(C);
        }
    }localvars(A);

    localvars.B.push_back(4);
    A = 3;
    localvars.RepetativeOperation(2);
    localvars.RepetativeOperation(4);
    localvars.RepetativeOperation(8);

    printf("A = %d, B[3] = %d", A, localvars.B[3]);
}
#include<iostream>
using namespace std;
class c1 {
    string a;
    string b;

public:
    void f1();
    void f2();
};

void c1::f1() {
    cin >> a;
    cin >> b;
    f2();
}

void c1::f2() {
    cout << "vals are: " << a << b;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM