我正在制作一個簡單的游戲,其中有幾個屬于同一類的專案物件。我不想用永無止境的物件串列填充我的 main 函式,而是想創建一個執行此操作的函式,然后在 main 函式的開頭呼叫它,但我意識到一旦它們的函式結束,它們就會像平常一樣被銷毀變數。是否有一種解決方法可以實體化所有物件而無需在我的主函式中寫入一個巨大的串列?(以下代碼不是我在我的程式中使用的代碼,它是簡化的)
#include <iostream>
class Items
{
public:
std::string name;
int number;
};
void CreateObjects()
{
Items obj1 = {"Obj1", 1};
Items obj2 = {"Obj2", 2};
Items obj3 = {"Obj3", 3};
}
int main ()
{
CreateObjects();
std::cout << obj1.name;
//here I get an error saying "Identifier obj1 is undefined"
}
uj5u.com熱心網友回復:
class Items
{
public:
std::string name;
int number;
};
你用這些變數宣告了一個類。太好了,現在讓我們用其中三個專案創建另一個類:
class Objects {
public:
Items obj1, obj2, obj3;
Objects() : obj1{"Obj1", 1},
obj2{"Obj2", 2},
obj3{"Obj3", 3}
{
}
};
任務完成,您甚至不需要單獨的功能!只需Objects在 main 中實體化一個類作為區域變數,就完成了:
Objects objects;
std::cout << objects.obj1.name;
uj5u.com熱心網友回復:
obj1不在您使用它的功能范圍內。對于來自 C/C /Java/JS/F#/... 編程語言范圍的語言來說,這是一個非常基本的概念:變數不能從它們定義的 {}(它們的范圍)之外訪問。在您的情況下,當您嘗試訪問它們時,它們甚至不再存在:所有三個obj1/2/3都在CreateObjects.
因此,在您的用例中,您可能會寫出完全不同的內容1。但是你可以做這樣的事情
#include <iostream>
#include <string>
#include <tuple>
class Item {
public:
std::string name;
int number;
};
auto createStuff() {
Item obj1{"Obj1", 1};
Item obj2{"Obj2", 2};
Item obj3{"Obj3", 2};
return std::tie(obj1, obj2, obj3);
}
int main() {
auto [a,b,c] = createStuff();
std::cout << "a: " << a.name << " b: " << b.name << " c: " << c.name << "\n";
}
1(已被編輯廢棄)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401148.html
