у меня есть вектор и объект, объявленный в plane.h:станд :: вектор, не сохраняя сдвинуться назад объекты инстанцированы в реализации
extern Plane Default;
extern std::vector<Plane *>universe;
Они определены в plane.cpp:
Plane Default("Default");
std::vector<Plane *>universe;
Plane конструктор:
Plane::Plane(const std::string &label) {
/* check universe to ensure uniqueness */
std::cout << this << std:endl; //DEBUG CHECK to see what I push_back
universe.push_back(this); //ACTION to keep track of the planes
std::cout << universe.back() << std::endl; //DEBUG CHECK to ensure that it was stored correctly
}
выход подтверждает, что самолет действительно находится в векторе.
В главном:
if(universe.empty()) cout << "EMPTY UNIVERSE" << endl;
показывает, что вектор не сохраняет значение. Я ожидал, что значение Default (как определено в plane.cpp) будет сохранено в юниверсе.
Однако Вселенная сохраняет значения, когда я инстанцирую самолеты из главного
Я предполагаю, что это имеет отношение к локальной копии, объем и передачи по значению, но не могу выяснить способ чтобы создать экземпляр плоскости по умолчанию INSIDE, чтобы ее адрес сохранялся в векторе.
Я также попытался объявить вектор от кучи, так как:
extern std::vector<Plane *> *universe;
и определяется следующим образом:
std::vector<Plane *> *universe = new std::vector<Plane *>;
Это просто разбило программу. Я использую Mingw32 4.9 на 64-битной Vista, машины в коде: Блоки 16,01 и -std = C++ 11
Вы можете сварить все это в [mcve]? – NathanOliver
глобальный порядок инициализации fiasco ... – Jarod42
Мое предположение: вы передали значение 'universe' по значению, поместили' Plane' в копию, уничтожили копию и затем проверили оригинал, если он содержит «Plane», , Но, не видя кода, это просто спекуляция. – nwp