Ваш код находится на правильном пути - вы получили правильную сигнатуру функции - но ваша логика немного ошибочна. В частности, предположим, что вы проходите этот цикл, не найдя ключ, который ищете:
for (int i = 0; i < used; ++i)
{
if (Records[i].Key == _Key)
{
return Records[i];
}
}
Если это происходит, ваша функция не возвращает значение, что приводит к неопределенному поведению. Так как он возвращает ссылку, это, вероятно, вызовет неприятный сбой в секунду, когда вы попытаетесь использовать ссылку.
Чтобы исправить это, вам нужно добавить некоторое поведение, чтобы вы не упали с конца функции. Один из вариантов - добавить ключ в таблицу, а затем вернуть ссылку на эту новую запись таблицы. Это поведение функции класса operator[]
класса STL std::map
. Другим было бы создание исключения, говорящего о том, что ключа там не было, что имеет недостаток в том, что он немного нелогичен.
В совершенно не связанной ноте я должен отметить, что с технической точки зрения, вы не должны называть параметр этой функции _Key
. Стандарт C ++ гласит, что любое имя идентификатора, начинающееся с двух символов подчеркивания (т. Е. __myFunction
) или одного знака подчеркивания, за которым следует заглавная буква (как в вашем примере _Key
), зарезервировано реализацией для любых целей, которые они могут счесть необходимыми. , Они могут #define
идентифицировать что-то бессмысленное или сделать так, чтобы он соответствовал какому-то встроенному компилятору Это может привести к тому, что ваша программа прекратит компиляцию, если вы перейдете с одной платформы на другую. Чтобы это исправить, введите K
в нижнем регистре (_key
) или полностью удалите подчеркивание (Key
).
Надеюсь, это поможет!