не понятна причина segfault
class Item {
public:
string Name = "null";
int Price = 0;
Item(string aName, int aPrice) {
Name = aName;
Price = aPrice;
}
};
class Map {
public:
Item List[10];
};
int main() {
Map* HashTable;
cout << HashTable->List[0].Name;
return 0;
}
очень долго пытаюсь решить эту проблему. Ничего не понимаю.
main.cpp:25:11: error: no matching function for call to ‘Item::Item()’ 25 | Map() { | –
Ответы (2 шт):
Эта ошибка вылазит из-за того, что у класса Map есть поле или вектор полей с каким либо классом(в данном случае Item), у этого класса нет конструктора по умолчанию и в вызове конструктора класса, который содержит поле данного класса в конструкторе не вызывается конструктор этого класса будет ошибка.
Вы должны добавить в Map следующий конструктор:
Map(Item List[10]) : List(List) {}
Объяснение, исходя из ошибки, у вас нет конструктора без параметров, для инициализации массива классов, нужен конструктор по умолчанию (без параметров), которого у вас нет, либо необходимо создавать объекты используя конструктор который у вас есть:
class Item {
public:
string Name = "null";
int Price = 0;
Item() { } // initializing with default values as null and 0
Item(string aName, int aPrice) {
Name = aName;
Price = aPrice;
}
};
Помимо всего, у вас не выделена память под объект HashTable
:
Map *HashTable = new Map;