C ++ указатель на карту-> второй не указывает

0

Отказ от ответственности: я новичок в C++ (студент), и это для оценки на компьютере, поэтому, пожалуйста, не дайте мне ответа. Если бы вы могли "посоветовать" мне ответ, чтобы помочь моему пониманию, это было бы высоко оценено.

Итак, у меня есть карта:

std::map<std::string,MyClass> mymap;

и у меня есть итератор, который просматривает эту карту и делает материал (который я написал):

MyClass *retVal;
for (auto m : mymap) 
{
    if (m.count() == 0)
        *retVal = m.second;
}

return *retVal;

Я не могу просто вернуть m.second поэтому мне нужно выяснить, как получить * retVal, чтобы указать на ссылку m.second, а не на значение.

Я думал, что у меня это есть, но отладчик говорит иначе.

Я попытался добавить &m.second но компилятору это не понравилось.

Я даже попробовал

for(<std::map<std::string,MyClass>::iterator myIter = mymap.begin(); myIter != tasks.cend(); ++myIter) 

с изменением всего. .second до ->second, но опять же, без радости.

Я действительно поражаю кирпичную стену, как это исправить... любая помощь очень ценится.

Благодарю.

  • 0
    «компилятору это не понравилось» - выведите фактическую ошибку, и мы можем помочь. Footprint функции Хотя я предполагаю, что ваша функция footprint - это MyClass foo() , которая возвращает класс по значению. Если вы хотите вернуть его по ссылке, верните либо MyClass& либо MyClass* , но в любом случае владение может стать странным.
  • 0
    ТАК не для руководства. Это не услуга наставничества. Это хранилище вопросов и ответов на века. Вы должны обсудить это с репетитором, другом или в чате.
Теги:
pointers
c++11

1 ответ

2
Лучший ответ

Во-первых, вам нужна ссылка, а не копия элемента карты:

for (auto & m : mymap)
          ^

Затем используйте оператор & (адрес), чтобы получить указатель на его значение:

retVal = &m.second;
         ^

Обратите внимание, что это назначает указатель (retVal), а не объект, на который он указывает (*retVal). Присвоение объекта было бы неправильным, поскольку оно не указывает на действительный объект.

  • 0
    Спасибо за ответ, Майк. Поэтому, когда я объявляю retVal как указатель * retVal, мне больше не нужно *retVal = ? Кроме того, & имеет смысл! Большое спасибо!
  • 0
    @destro Вероятно, не в этой функции, хотя вам придется сделать это когда-нибудь ... *retVal = установит, на что указывает значение для этого значения. Если вам нужно скопировать класс в ячейку памяти, то вы сделаете это. Если вы не используете умные указатели, вы, вероятно, когда-нибудь это сделаете.
Показать ещё 1 комментарий

Ещё вопросы

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