Исходя из кода LookupTable
, который вы разместили в последующем вопросе , на этот вопрос наконец можно ответить.(Действительно, я думаю, что вы должны просто поместить этот код здесь и удалить другой вопрос.)
table[selection]
либо возвращает ссылку на запись в таблице (если выбор найден), либо иным образом ссылкуинициализированный по умолчанию объект.Когда LookupTable специализирован для типа указателя (такого как Product*
в вашем коде), тогда инициализируемый по умолчанию объект будет указателем NULL.
Так, для LookupTable<Product*>
в вашем коде выражениеtable[selection]
либо направляет результат в указатель на Product
, найденный в таблице, либо в указатель NULL Product
.
Следовательно, вместо немедленной разыменования результата table[selection]
и попыткиприсвоив его объекту Product
, вы должны взять значение указателя и проверить его.
Это будет выполнено с помощью кода, подобного следующему:
Product* result = table[selection];
if(result != NULL)
{
Product temp = *result;
// do something with temp, etc, etc
}
else
{
cout << "invalid product code" << endl;
}