Salut,
Il faut comprendre que le compilateur est un brave soldat qui fait ce qu'on lui dit, sans se poser de question...
Aussi, si tu lui dit qu'une fonction doit renvoyer quelque chose, il va, tout simplement, s'étonner si, en fin de fonction, il n'y a pas une instruction de retour
Tu as donc deux solutions :
- Soit tu es sur que, quoi qu'il arrive, tu trouvera effectivement l'élément dans ton tableau (mais peux tu seulement le certifier en toutes cirocnstances
), et, dans ce cas, tu peux tout simplement ignorer cet avertissement - Soit, et c'est sans doute mieux, renvoie une valeur clairement identifiée comme une valeur invalide (NULL, ou nullptr en C++11 ) si l'élément n'a pas été trouvé dans le tableau.
Il n'y a rien qui t'interdise d'avoir plusieurs instructions return dans ta fonction, mais, si elle doit renvoyer une valeur (non void

), la dernière instruction doit être un return
Pour ne pas avoir à parcourir l'ensemble du tableau, tu peux donc parfaitement renvoyer la valeur dés que tu la trouves, mais, il est "de bon ton" de prévoir le cas où la valeur n'a pas été trouvée (ne serait-ce que parce que tu peux avoir un effet de bord "quelque part" qui peut avoir invalidé ta valeur de recherche

)
L'idéal est donc d'avoir un code proche de
1 2 3 4 5 6 7 8 9 10 11 12
| Element * searchElement( std::string anId , std::vector< Element * > const & aVectorOfElements )
{
std::vector< Element * >::iterator anIter = aVectorOfElements.begin();
for( ; anIter != aVectorOfElements.end() ; ++anIter )
{
if( (*anIter)->m_id == anId )
{
return( (*anIter) );
}
}
return NULL;
} |
PS : plutot que de passer le tableau par pointeur comme tu l'as fait, passes le par référence constante, c'est plus facile à manipuler, et cela te permet de respecter plus facilement la
const correctness 
Partager