Ich habe eine kleine Lambda-Funktion, die QTreeWidgetItem
finden und zurückgeben soll. Wenn es den gegebenen Artikel jedoch nicht findet, gibt er ein nullptr
zurück. Aber wenn ich versuche, es zu kompilieren, gibt es mir einen Fehler.
Die Funktion:
%Vor%Der Fehler:
Fehler 1 Fehler C3487: 'nullptr': Alle Rückgabeausdrücke in einem Lambda müssen den gleichen Typ haben: vorher war es 'QTreeWidgetItem *' cpp 251
Ich habe damit die angegebene Zeile geändert und jetzt kompiliert:
%Vor%aber ich möchte diese Syntax vermeiden. Wie kann ich das lösen?
Ich benutze Visual Studio 2012
.
Sie können eine explizite Annotation vom Rückgabetyp hinzufügen:
%Vor% Auf diese Weise wird nullptr
korrekt in Ihren Zeigertyp konvertiert. Sie erhalten diesen Fehler, weil das Lambda annimmt, dass keine Conversions vorgenommen werden sollten, und behandelt nullptr_t
als legitimen alternativen Rückgabetyp.
Als zusätzliche Randnotiz sollten Sie stattdessen (std::)optional
verwenden. Die Nullsetzbarkeit von Zeigern kann verwendet werden, um eine fehlende Rückgabe darzustellen, aber das bedeutet nicht, dass sie unbedingt sein sollte.