我在函数内声明了一个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中声明对象创建,但我宁愿将它保留在函数内部,以便它更容易阅读。有没有办法做到这一点?
感谢您的帮助
答案 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;
}