Причина, по которой это не работает, заключается в том, что ваша функция возвращает ссылку. Ссылка всегда должна быть фактическим экземпляром. Ява не С ++.
Один из способов исправить это - изменить функцию так, чтобы она возвращала указатель, который работает гораздо больше, чем ссылки, используемые Java. В этом случае вы можете просто return null;
.
Fruit*
FruitBasket::getFruitByName(std::string fruitName)
{
std::map<std::string,Fruit>::iterator it = _fruitInTheBascit.find(fruitName);
if(it != _fruitInTheBascit.end())
{
return &(*it).second;
}
else
{
return NULL;
}
}
Если вы хотите по какой-то причине избежать этого, вы можете определить объект-страж и вернуть его взамен. как то так
Fruit NullFruit;
Fruit&
FruitBasket::getFruitByName(std::string fruitName)
{
std::map<std::string,Fruit>::iterator it = _fruitInTheBascit.find(fruitName);
if(it != _fruitInTheBascit.end())
{
return (*it).second;
}
else
{
return NullFruit;
}
}
дополнительная опция - вообще не возвращаться. Возбудить исключение
class NullFruitException: public std::exception {};
Fruit&
FruitBasket::getFruitByName(std::string fruitName)
{
std::map<std::string,Fruit>::iterator it = _fruitInTheBascit.find(fruitName);
if(it != _fruitInTheBascit.end())
{
return (*it).second;
}
else
{
throw NullFruitException;
}
}