не понятна причина 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 шт):

Автор решения: Matvj

Эта ошибка вылазит из-за того, что у класса Map есть поле или вектор полей с каким либо классом(в данном случае Item), у этого класса нет конструктора по умолчанию и в вызове конструктора класса, который содержит поле данного класса в конструкторе не вызывается конструктор этого класса будет ошибка.

Вы должны добавить в Map следующий конструктор:

Map(Item List[10]) : List(List) {}
→ Ссылка
Автор решения: evo

Объяснение, исходя из ошибки, у вас нет конструктора без параметров, для инициализации массива классов, нужен конструктор по умолчанию (без параметров), которого у вас нет, либо необходимо создавать объекты используя конструктор который у вас есть:

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;
→ Ссылка