Salut,
tu as essayé de faire un double déreférencement ? *it_desc est un pointeur, donc pour obtenir une référence, tu dois déréférencer it_desc une fois de plus :
Citation :
return *(*it_desc);
|
Pour le type de retour tu as deux choix:
- Soit cette fonction de rechercher n'échoue jamais, c'est à dire que dans le contexte de ton programme, i_name est FORCEMENT un nom de catégorie. Dans ce cas tu peux garder un retour par référence. Pour la propreté du programme et éviter une erreur à la compilation, il faudrait cependant lever une exception après la boucle :
Citation :
throw std::exception("Error: descriptor "+i_name+" doesn't exist in Class "+m_name);
|
- Soit la fonction peut parfois échouer à trouver une correspondance, et dans ce cas elle doit pouvoir retourner un résultat null. Dans ce cas, tu dois effectivement utiliser une signature avec un pointeur en résultat :
Citation :
CatDescriptor* Category::getCatWantedDesc(const std::string& i_name)
{
...
return NULL;
}
|
Enfin, selon la version de ton compilateur, tu n'as plus besoin d'utiliser begin .. end...
En C++11, ta fonction peut s'écrire :
Citation :
CatDescriptor& Category::getCatWantedDesc(const std::string& i_name){ for(CatDescriptor* cd : m_descList)
{ if(cd->getName() == i_name) return cd; }
std::cerr << "Error: descriptor "+i_name+" doesn't exist in Class "+m_name; }
|
Message édité par deidril le 28-01-2014 à 11:19:07
---------------
Ce qui ne nous tue pas nous donne des points d'expériences