Wie gibt man nullptr aus einer Lambda-Funktion zurück?

8

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 .

    
p.i.g. 11.06.2015, 14:00
quelle

2 Antworten

11

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.

    
Bartek Banachewicz 11.06.2015, 14:29
quelle
2

Wenn Sie nur die Syntax und nicht das Casting vermeiden möchten, könnten Sie das so sehen:

%Vor%

Ich habe ein kleines Beispiel dafür gegeben, wie Barteks und meine Antwort wirklich funktionieren:

%Vor%     
gsamaras 11.06.2015 14:08
quelle

Tags und Links