В вашем списке хранятся объекты типа HashNode
, , а не , типа HashNode*
.
Таким образом, вам нужно решить, какой из них вы хотите использовать, и соответствующим образом изменить код.
Если вы хотите сохранить HashNode
, тогда ваш insert
неправильный - вместо этого он должен создать узел в стеке и сохранить его по значению в списке.
Если вы хотите сохранить указатель, значит, ваш тип Table
неправильный, и вместо него должен быть vector<list<HashNode*>>
- обратите внимание, что с ним следует обращаться осторожно, поскольку указатели не будут автоматическиудалено.
Лично я бы посоветовал вам перейти с № 1 и избавить себя от множества головных болей.Но если вы настаиваете на # 2, то я предлагаю вам прекратить использовать malloc
и использовать new
- или еще лучше - std::unique_ptr
или std::shared_ptr
для автоматического управления временем жизни.
Также заслуживает внимания вашопределение Table *table
.Это сбивает с толку, так как Table
является вектором.Ваша функция insert
разыменовывает этот указатель, ожидая, что он, возможно, будет указывать на массив значений Table
, когда совершенно ясно, что вы на самом деле думаете, что это вектор.Я почти уверен, что вы не хотите, чтобы это был указатель.
Так как я только что заметил эту деталь, я думаю, что это первый источник вашей ошибки, начиная с table[index]
на самом деле тип Table
, а не тип list<HashNode>
, и вы пытались вызвать несуществующую функцию vector<list<HashNode>>::push_back(HashNode*)
.