如何使函数变量 public,它们不在 class C++ 中

How to make functions variables public, they are not in a class C++

我想知道如何将一个函数的变量 public 赋给其他函数。

示例:

void InHere
{
    int one = 1; // I want to be public
}
int main()
{
    InHere(); // This will set int one = 1
    one = 2; // If the variable is public, I should be able to do this
    return 0;
}

有人知道怎么做吗?我在搜索时唯一找到的是 classes,因为你可以看到 class 中什么也没有,我不希望它们在一个中。

非常感谢任何帮助!

只需将变量设置为全局变量即可。然后你可以从其他功能访问它。

int one;
void InHere()
{
    one = 1; // I want to be public
}
int main()
{
    InHere(); // This will set int one = 1
    one = 2; // If the variable is public, I should be able to do this
    return 0;
}

如果你想在 class 中使用它,请尝试下面的代码

#include <iostream>
using namespace std;

class My_class
{
    // private members
public: // public section
    // public members, methods or attributes
    int one;
    void InHere();
};

void My_class::InHere()
{
    one = 1; // it is public now
}
int main()
{
    My_class obj;
    obj.InHere(); // This will set one = 1
    cout<<obj.one;
    obj.one = 2; // If the variable is public, I should be able to do this
    cout<<obj.one;
    return 0;
}

一个函数局部定义的变量通常在该函数之外是不可访问的,除非该函数显式地为该变量提供一个 reference/pointer。

一个选项是让函数显式return向调用者提供指向该变量的引用或指针。如果变量不是 static,那将给出未定义的行为,因为它在函数 returns.

之后不存在
int &InHere()
{
     static int one = 1;
     return one;
}

void some_other_func()
{
     InHere() = 2;
}

如果变量 one 不是 static,这将导致未定义的行为,因为在这种情况下,变量仅在调用 InHere() 时才存在,并且不再存在returns(所以调用者收到一个悬空引用——对不再存在的东西的引用)。

另一个选项是函数将变量的指针或引用作为参数传递给另一个函数。

 void do_something(int &variable)
 {
      variable = 2;
 }     

 int InHere()
 {
      int one = 1;
      do_something(one);
      std::cout << one << '\n';    // will print 2
 }

缺点是这只提供对 InHere() 调用的函数的访问。虽然在这种情况下变量不需要是 static,但变量仍然作为函数 returns 不复存在(所以如果你想以某种方式组合选项 1 和选项 2,变量需要 static)

第三个选项是在文件范围内定义变量,因此它具有静态存储持续时间(即它的生命周期与函数无关);

 int one;
 void InHere()
 {
      one = 1;
 }

 void another_function()
 {
      one = 2;
 }

 int main()
 {
     InHere();
        // one has value 1

     some_other_function();
        // one has value 2
 }

可以在任何具有变量声明可见性的函数中访问全局变量。例如,我们可以做

 extern int one;             // declaration but not definition of one

 int one;                    // definition of one.  This can only appear ONCE into the entire program

 void InHere()
 {
      one = 1;
 }

并且,在其他源文件中

 extern int one;         // this provides visibility to one but relies on it
                         //   being defined in another source file 

 void another_function()
 {
      one = 2;
 }

 int main()
 {
     InHere();
        // one has value 1

     some_other_function();
        // one has value 2
 }

不过要小心 - global/static 变量有很多缺点,在某种程度上它们通常被认为是非常糟糕的编程技术。查看 this link(以及从那里链接到的页面)以了解一些问题的描述。