Копировать объект в C ++

0
    class Item
    {
        string sItemName;
        int iQt, iPrice;

    public:
        Item(string, int, int);
        int getPrice(int);
     };


    Item o_FindItem;        

    int ItemCSVImport::GetItem(char* cItemName)
    {
        o_FindItem = (m_ItemsMap.find(cItemName)->second);
        return 1;
     }

Приведенный выше код работает нормально в первый раз. Но когда я пытаюсь вызвать тот же метод во второй раз, первая строка внутри метода дает ошибку сегментации. Может ли кто-нибудь предложить решение?

  • 5
    Что такое o_FindItem ? Что такое m_ItemsMap ? Делаете ли вы что-нибудь между двумя GetItem() ? Вы используете тот же cItemName ?
  • 1
    Возможно, вам следует проверить значение итератора перед его разыменованием
Показать ещё 1 комментарий
Теги:
object

1 ответ

3

Вероятно, проблема в том, что имя cItemName не найдено. Чтобы исправить это, попробуйте что-то вроде этого:

int ItemCSVImport::GetItem(char* cItemName)
{
    auto it = m_ItemsMap.find(cItemName);
    if (it != m_ItemsMap.end()) {
        o_FindItem = it->second;
        return 1;
    } else {
        return 0;
    }
}
  • 0
    Тогда я получаю ту же ошибку в нем = m_ItemsMap.find (cItemName); линия. Нужно ли чистить объект перед повторным назначением?
  • 1
    Проверьте, если cItemName == NULL . Если это так, вы должны вернуться рано, до вызова find() , вероятно.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню