Переменные имена объектов в C ++ - PullRequest
0 голосов
/ 03 апреля 2020

Я ищу способ создания объектов класса через l oop. Для справки, я пытаюсь создать класс объектов, пользовательский ввод определит, сколько объектов необходимо. Я использую конструктор внутри для l oop, чтобы сделать это, но он требует, чтобы имя объекта было переменным. Я перепробовал много методов, ничего не получалось, включая векторы. Я буквально начал использовать C ++ в день go, поэтому игнорируйте беспорядочный код или ошибки fool sh, если они не имеют отношения к вопросу, это любимый проект.

// 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

ru [i] is что должно быть имя переменной. Я либо получаю сообщение об ошибке, в котором говорится, что «замедление« en »как массива функций», либо что «EnemyClass» не является объявленной функцией. Не уверен, как использовать это как попытку из другого найденного мной сообщения на форуме:

Вопрос был таким же, как у меня, с кодом ниже:

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

Код ответа:

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

Но это приводит к ошибке «Не объявлена ​​функция» в файле stl_construct.h

1 Ответ

1 голос
/ 03 апреля 2020

Посмотрите на Почему массивы переменной длины не являются частью стандарта 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 Не изучайте C ++ в Stackoverflow , Начните читать книги с Полное руководство и список книг C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...