Как поместить «нетривиальный» объект в стуктуру? Доброе время суток! Я не знаю как правильно сформулировать мой вопрос, так как столкнулся с этим впервые, обшарил кучу форумов, но толком так и не понял в чем суть. У меня есть следующая структура проекта. (В урезаном формате и без реализации методов, вставлю только имеющиеся конструкторы)class Point : public PointBase { public: Point(double X, double Y, double Z) { } private: double X; double Y; double Z; }; class Edge : public EdgeBase { public: Edge(Point* firstPoint, Point* secondPoint) { this->firstPoint = firstPoint; this->secondPoint = secondPoint; } private: Point* firstPoint; Point* secondPoint; }; template struct item { item* next; type_t data; }; template class Array : public ArrayBase { public: Array(); friend class IArray; private: item *head; item *tail; }; template class Array; template class IArray { public: IArray() {}; IArray(Array&); private: Array* arr; item* currentItem; }; class Model : public ModelBase { public: Model(); Model(const Model& model) { }; Model& operator=(const Model& model) { } private: IArray points; IArray edges; Model(Model&&); }; Далее, например в классе IArray (итератор для класса Array), я хочу сделать функцию добавления элемента. Но на попытку выделить памятьitem* newItem = new item; выскакивает ошибка C2280 "item::item(void)": attempting to reference a deleted function мол попытка ссылки на удаленную функцию, в качестве функции он требует конструктор у структуры item (?_?) При добавлении всевозможных конструкторов (вообще впервые на самом деле сталкиваюсь, чтобы структура требовала конструкторы, учитывая, что уже делал подобный проект) (ограничился этими, не знаю, что еще можно добавить)template struct item { item* next; type_t data; item() {}; item(const item&) {}; item(item&&) {}; }; Выскакивает ошибка, что не найден конструктор подходящий конструктор по умолчанию для Edge (для Point типа найден ~_~) В чем собственно тут дело я без понятия, предположение только в том, что в Edge по сути у нас хранится еще один объект (правда там только указатель на него), хотя не знаю как это может влиять. Буду очень признателен, если кто-то поможет разобраться в этой ситуации, и подсказать возможное ее решение. Заранее спасибо!
Проблема здесь действительно связана с тем, что структура item требует наличия конструктора по умолчанию для типа type_t, который в данном случае используется как Point и Edge. Чтобы исправить эту проблему, вам нужно убедиться, что тип type_t (то есть Point и Edge в вашем случае) имеет конструктор по умолчанию или явно определенный конструктор, который будет использоваться при создании объекта в структуре item.
Например, если у вас есть конструктор в классе Point и Edge, который принимает аргументы, вам нужно добавить конструктор по умолчанию в эти классы либо явно определить конструктор по умолчанию в структуре item для типа type_t.
Вот пример того, как можно обновить структуру item для работы с классами Point и Edge:// для Point template
struct item { item* next; type_t data;
Проблема здесь действительно связана с тем, что структура item требует наличия конструктора по умолчанию для типа type_t, который в данном случае используется как Point и Edge.
Чтобы исправить эту проблему, вам нужно убедиться, что тип type_t (то есть Point и Edge в вашем случае) имеет конструктор по умолчанию или явно определенный конструктор, который будет использоваться при создании объекта в структуре item.
Например, если у вас есть конструктор в классе Point и Edge, который принимает аргументы, вам нужно добавить конструктор по умолчанию в эти классы либо явно определить конструктор по умолчанию в структуре item для типа type_t.
Вот пример того, как можно обновить структуру item для работы с классами Point и Edge:// для Point
item() : next(nullptr), data() {}template struct item
{
item* next;
type_t data;
};
// для Edge
item() : next(nullptr), data(nullptr, nullptr) {} // я предполагаю, что у Edge есть конструктор, который принимает указателиtemplate struct item
{
item* next;
type_t data;
};
Таким образом, по добавлению элемента у вас не будет ошибки, и объекты Point и Edge будут корректно инициализироваться в структуре item.
Надеюсь, что это поможет вам разобраться в проблеме и решить ее. Если у вас останутся вопросы, не стесняйтесь задавать их.