Fehler Kompilieren von C++/CLI Delegieren Anruf mit Prädikat mit Array::FindAll()
Führt der folgende code C3867 (...Funktionsaufruf fehlendes argument-Liste...) und C3350 (...ein delegatkonstruktor erwartet 2 argument(en)...). Was mache ich falsch?
public ref class Form1 : public System::Windows::Forms::Form
{
public:
bool IsEven(int i){
return (i % 2) == 0;
}
Form1(void)
{
numbers = gcnew array<int>{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
array<int> ^even = Array::FindAll(
numbers, gcnew Predicate<int>(IsEven));
}
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++/CLI, müssen Sie die aktuelle Instanz des Typs, die die Funktion enthält:
(oder machen Sie Ihre
IsEven
Methodestatic
)Folgende einfache Konsolenanwendung bietet Beispiele für die
FindAll()
- Methode mit einemarray
im .NET C++/CLI.Dies funktioniert mit Visual Studio 2005, die keine Unterstützung für Lambda-Ausdrücke. Da dein Beispiel mit Windows Forms habe ich eine extra-Klasse in der Windows-Konsole-Anwendung zu zeigen, die
Predicate
Funktion aus einer Klasse, wenn in derFindAll()
.Dieses Beispiel zeigt drei verschiedene Mechanismen für die Bereitstellung von ein-Prädikat:
Dies ist ein sehr einfaches Beispiel für die Verwendung von
int
aber es ist auch die Arbeit mit komplexeren Datenstrukturen, wie gut.Die Ausgabe dieses Programms sieht wie folgt aus: