在函数内部声明一个全局对象(c ++)

时间:2016-01-17 19:27:12

标签: c++ global-variables

我在函数内声明了一个struct的对象,并且我希望访问该函数之外的所述对象(使它们成为全局对象)。这是我想做的一个例子

            #include <iostream>
            using namespace std;

            struct exampleStruct
            {
                int ID;
            };

            void makeExampleStruct ()
            {
                exampleStruct exampleObj[30];

                for (int r=0;r<=30;r++)
                {
                    exampleObj[r].ID=r;
                }
            }

            int main()
            {
                makeExampleStruct();
                cout << exampleObj[1].ID << endl;
                return 0;
            }

这给了我一个&#34;&#39; exampleObj&#39;未在此范围内宣布&#34;。我知道我可以简单地在main中声明对象创建,但我宁愿将它保留在函数内部,以便它更容易阅读。有没有办法做到这一点?

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

尝试全局声明变量(在函数外部) 使用该函数来更改全局变量。

在函数内声明的变量只能在该函数中访问;它们被称为local variables,因为它们是声明它们的函数的本地。

main()函数无法访问其他函数的局部变量。

全球声明的变量随处可见。

答案 1 :(得分:0)

没有。你需要在函数之外声明它,否则它是本地的。

答案 2 :(得分:0)

调用该函数后,您的数组不再存在:

void makeExampleStruct ()
{
    exampleStruct exampleObj[30];
      // exampleObj is created here

    for (int r=0;r<=30;r++)
    {
        exampleObj[r].ID=r;
    }

    // exampleObj is destroyed here.
}

因此,即使您可以访问该对象,在函数返回后执行此操作也是违法的,因为对象的生命周期已经结束。

答案 3 :(得分:0)

您无法从函数提供对局部变量的全局访问。你可以做的就是让它们static并返回一个引用:

exampleStruct[30]& makeExampleStruct () {
     static exampleStruct exampleObj[30];
     static bool isinitialized = false;

     if(!isinitialized) {
          for (int r=0;r<=30;r++) {
               exampleObj[r].ID=r;
          }
          isinitialized = true;
     }

    return exampleObj;
}