Отказ от ответственности: я новичок в 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
, но опять же, без радости.
Я действительно поражаю кирпичную стену, как это исправить... любая помощь очень ценится.
Благодарю.
Во-первых, вам нужна ссылка, а не копия элемента карты:
for (auto & m : mymap)
^
Затем используйте оператор &
(адрес), чтобы получить указатель на его значение:
retVal = &m.second;
^
Обратите внимание, что это назначает указатель (retVal
), а не объект, на который он указывает (*retVal
). Присвоение объекта было бы неправильным, поскольку оно не указывает на действительный объект.
*retVal =
? Кроме того, & имеет смысл! Большое спасибо!
*retVal =
установит, на что указывает значение для этого значения. Если вам нужно скопировать класс в ячейку памяти, то вы сделаете это. Если вы не используете умные указатели, вы, вероятно, когда-нибудь это сделаете.
MyClass foo()
, которая возвращает класс по значению. Если вы хотите вернуть его по ссылке, верните либоMyClass&
либоMyClass*
, но в любом случае владение может стать странным.