簡體   English   中英

變量 Object C++ 中的名稱

[英]Variable Object Names in C++

我正在尋找一種通過 for 循環創建 class 對象的方法。 作為參考,我正在嘗試創建對象的 class,用戶輸入將確定需要多少對象。 我在 for 循環中使用構造函數來執行此操作,但它需要 object 名稱是可變的。 我嘗試了很多方法,沒有任何效果,包括向量。 我從字面上開始使用 C++ 一天前,所以忽略凌亂的代碼或愚蠢的錯誤,除非它們與問題相關,這是一個寵物項目。

// Enemy Names
    string eNames[ENum]{};

    // Enemy Initiatives
    double eInits[ENum]{};

    //Enemy Temp ID's
    int eTempids[ENum]{};

    // Enemy Names Vector
    std::vector<EnemyClass> en(ENum);

    if (ENum > 0) {
        for(int i = 0; i < ENum; i++){
            string name;
            double init;
            int tempid = i + PLAYER;
            cout << "Enter Enemy " << i + 1 << "'s Name" << endl;
            cin >> name;
            cout <<  "Enter " << name << "'s Initiative" << endl;
            cin >> init;
            eNames[i] = name;
            eInits[i] = init;
            eTempids[i] = tempid;
            EnemyClass en[i](string name, double init, int tempid);
        };
    }; // END of IF Statement

en[i] 是變量名。 我要么收到一條錯誤消息,指出“'en' 作為函數數組的減速”或'EnemyClass' 不是聲明的 function,不知道如何使用它是我發現的另一個論壇帖子的嘗試:

問題與我的相同,代碼如下:

for (int count = 0;  count < no_of_objects; count ++)
{
    ClassName object_name[count]
}

答案代碼:

std::vector<ClassName> objects (no_of_objects);

但這會在 stl_construct.h 文件中產生“未聲明的函數”錯誤

看看為什么變長 arrays 不是 C++ 標准的一部分? 了解為什么聲明string eNames[ENum]double eInits[ENum]int eTempids[ENum]是錯誤的。 使用向量,就像你對en所做的那樣: std::vector<string> eNames(ENum)std::vector<double> eInits(ENum)std::vector<int> eTempids(ENum)

關於你的問題。 分配是這樣使用的:

en[i] = EnemyClass(name, init, tempid);

如果您聲明空的敵人名稱向量並就地填充它會更好:

std::vector<EnemyClass> en;
// ...
  en.emplace_back(name, init, tempid);

PS 不要在 Stackoverflow 上研究 C++。 The Definitive C++ Book Guide and List開始閱讀書籍

暫無
暫無

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

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