Comment puis-je retourner un Pointeur Null dans une fonction C++
Je suis actuellement en train de travailler sur un morceau de code qui va chercher dans un vecteur de type Personne (dont j'ai défini dans le code et de s'afficher si nécessaire). Si elle trouve la personne, il retourne leur nom. C'est actuellement en train de travailler, mais si il ne trouve pas la personne, il est censé retourner un pointeur Null. Le problème est, je ne peux pas comprendre comment le faire retourner un pointeur Null! On ne conserve que soit le plantage du programme à chaque fois.
Code:
Person* lookForName(vector<Person*> names, string input)
{
string searchName = input;
string foundName;
for (int i = 0; i < names.size(); i++) {
Person* p = names[i];
if (p->getName() == input) {
p->getName();
return p; //This works fine. No problems here
break;
} else {
//Not working Person* p = NULL; <---Here is where the error is happening
return p;
}
}
}
- Juste retour " 0 " (zéro). C'est la représentation d'un pointeur null en C++.
nullptr
serait mieux, mais sérieusement, utilisezstd::find_if
et, de préférence, unstd::vector<Person>
sans le pointeur.- Oh, et aussi que vous n'étiez pas à l'initialisation de P dans presque tous les cas, il aurait une valeur != 0. Rappelez-vous que C++ n'est pas l'initialiser des variables automatiquement.
- Je le vois en cours d'initialisation.
- Vous avez une grave erreur de logique ici - cette boucle ne sera jamais exécuter plus d'une fois, chaque branche de la
if
retourne. - Merci pour toutes ces idées! Je suis d'essayer d'utiliser std::find_if mais vais avoir quelques erreurs de compilation. Je vais continuer à bien!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser std::find_if algorithme:
Pour C++03 version:
auto
l'inférence de type, les lambdas etnullptr
. Vous pouvez dérouler la boucle manuellement ou définir un foncteur hors-ligne (en dehors de la fonction) pour utiliserstd::find_if
Semble que vous avez juste à retourner la valeur Null, nullptr, ou 0.
codeproject
Si le nom que vous recherchez n'est pas sur le premier élément, puis vous n'êtes pas à la recherche dans le reste des éléments.
Vous avez besoin de faire quelque chose comme -
Comme Chris l'a suggéré, essayez d'utiliser
std::find_if
algorithme.Juste utilisez le code suivant: